前端SEO与爬虫与SSR(Server Side Render)
讲真,之前没考虑过这个问题。因为项目原因,自己用python的一些工具,爬取了淘宝、京东、百度等的一些图片和图片名称之类的信息。以为爬虫只是解析html文本,然后提取关键字,保存自己想要的信息即可,或者再不济就用个Selenium WebDriver去调用浏览器,从未想过爬虫与页面的关系。
在此之前,大家得了解了解H5语义化: http://www.daqianduan.com/6549.html ,可以看看这篇文章,写的很透彻。语义化就是为了代码具有可读性,提高了代码的可维护性,可以让页面结构清晰,有利于SEO和爬虫解析。div是非语义化标签,一个 div 看起来总没有一个 p 意义更明显。虽然现在 H5 出了一些语义化标签,比如 <header>/<section>/<footer>/<article> ,但是其实各大网站上用的很少,一方面是为了兼容低版本的浏览器,另一方面也可能是前端工程师(比如我),没有意识到语义化的重要性。
现在我们谈谈SEO(Search Engine Optimization ),SEO是搜索引擎优化,说简单点,就是你的前端的页面最好能让机器也很容易的看懂,并且轻松提取关键字。SEO在搜索引擎时代对于网站来讲意义重大,对于网站的流量导入,起着重大的作用。可以看看:https://www.v2ex.com/t/302616 。而纯前端的项目,由于需要页面加载完成后再去拉取数据进行渲染,大部分搜索引擎没法读取页面内容。特别是SPA项目,更是无法读取到每个路由页面的页面Title。在首屏渲染上,纯前端项目,先要加载Js,再通过Js去加载数据,这两部分网络传输都需要时间,所以难以避免出现页面白屏时间,体验不友好。所以就出现了SSR。
SSR(server side render),就是服务端渲染,服务器将每个要展示的页面都运行完成后,将整个相应流传送给浏览器,所有的运算在服务器端都已经完成,浏览器只需要解析 HTML 就行。浏览器渲染对爬虫不友好,也就是对SEO不友好,所以就出现了服务器端渲染。 Vue2.0在服务端创建了虚拟DOM,因此可以在服务端可以提前渲染出来,这解决了单页面一直存在的问题:SEO和初次加载耗时较多的问题。同时在真正意义上做到了前后端共用一套代码。要用SSR,得准备一个node server(express,koa…),这也不可避免地加大了性能、运维等挑战。
下面举个栗子:
比如用户A在上海某个局域网打开了 https://live.kuaishou.com/ ,用户B在背景某个局域网也打开了 https://live.kuaishou.com/ ,这是两个client,都向 live.kuaishou.com (前端服务器)发起了页面请求,假设前端服务器的物理机器在C地。前端服务器接受请求后,先向后台请求数据,一般前端服务器和后台同源,不跨域;(如果跨域,前端服务器和后台约定跨域策略)。前端服务器得到数据后,有两种选择。一是该页面初始模板发送给用户浏览器,用户浏览器等JavaScript 都完成下载并执行,自己输出 Vue 组件,进行生成 DOM 和操作 DOM,也就是浏览器端渲染页面(CSR)。另一种就是将同一个组件渲染为服务器端的 HTML 字符串,将HTML 字符串直接发送到用户浏览器,最后将这些静态标记"激活"为客户端上完全可交互的应用程序,这就是服务器端渲染(SSR)。
在CSR这里,同步是关键。如果 live.kuaishou.com 页面某些部分初始展示 loading 菊花图,然后通过 Ajax 获取内容,爬虫抓取工具并不会等待异步完成后再行抓取页面内容。也就是说,如果 SEO 对站点至关重要,而页面又是异步获取内容,则需要服务器端渲染(SSR)解决此问题。这样在客户端页面其实是静态的,这样方便抓取工具就能 get 到页面的很多重要内容。
学习链接:
1、如何用vue做ssr?https://www.cnblogs.com/wangshiyang/p/6565624.html
2.从0开始,搭建vue2.0的ssr服务(推荐):https://www.jianshu.com/p/c6a07755b08d
3.从0开始,搭建vue2.0的ssr服务系列之一:https://segmentfault.com/a/1190000009352740
4.基于vue的服务器端渲染:https://www.cnblogs.com/jcscript/p/7574276.html
5.从Script、Code Behind到MVC、MVP、MVVM: http://www.cnblogs.com/indream/p/3602348.html
前端SEO与爬虫与SSR(Server Side Render)的更多相关文章
- Vue(SPA) WebPack模块化打包、SEO优化(Vue SSR服务端同构直出)、全浏览器兼容完整解决方案
白驹过隙,时光荏苒 大概去年这个时候写了angular 结合webpack的一套前端方案,今年此时祭出vue2结合webpack的一套前端方案. 明年的这个时候我又是在做什么... 读在最前面: 1. ...
- 前端SEO技巧
前几天在慕课网上学习了“SEO在网页制作中的应用”,觉得挺好.挺有用的,今天,特此做了一个小小的笔记,也算是对学习过后的一个总结. 一.搜索引擎工作原理 当我们在输入框中输入关键词,点击搜索或查询时, ...
- 前端SEO
一.搜索引擎工作原理 当我们在输入框中输入关键词,点击搜索或查询时,然后得到结果.深究其背后的故事,搜索引擎做了很多事情. 在搜索引擎网站,比如百度,在其后台有一个非常庞大的数据库,里面存储了海量的关 ...
- 前端seo小结,网页代码优化
seo的目的:提高网站流量 search engine optimization 搜索引擎优化seo search engine marketing 搜索引擎营销sem 权重10个等级 等级越大,权重 ...
- 前端-SEO
SEO是 search Engine Optimization (搜索引擎优化) SEO: ①白帽SEO(普通SEO做的优化) 网站标题.关键字.描述 网站内容优化 Robot.txt文件 网站地 ...
- 前端SEO优化
结构优化 1.扁平化结构,目录层次越少越好
- 关于前端SEO的一些常用知识总结
Search English Optimization,搜索引擎优化,简称为SEO. (1)网站结构布局优化:尽量简单 1. 控制首页链接数量:首页链接不能太多,一旦太多,没有实质性的链接,很容易影响 ...
- 前端seo基础规范
基本规范 TDK代码规范 A: 关键词,一般3~4个最好,要与当前页面内容相关(根据实际情况,不适宜过多堆积关键词): B: 杜绝不同URL的页面标题重复现象,作为搜索结果摘要的重要选择目标之一,一定 ...
- 从壹开始前后端分离 [ Vue2.0+.NetCore2.1] 二十六║Client渲染、Server渲染知多少{补充}
前言 书接上文,昨天简单的说到了 SSR 服务端渲染的相关内容<二十五║初探SSR服务端渲染>,主要说明了相关概念,以及为什么使用等,昨天的一个小栗子因为时间问题,没有好好的给大家铺开来讲 ...
随机推荐
- 2017-9-3模拟赛T3 密码(key)
题目 题解 这题用类似暴力+优化(划掉)的思想. 对于每个轨迹串,求出每一位向后的第一个0-9间某个数字的位置(如123112中3后面第1个2的位置为从左往右数第6个),复杂度O(Σn)=O(L). ...
- ViewBag赋值Html格式值
今天再给自己总结一下,关于ViewBag赋值Html格式值,但是在web页显示不正常; 例如,ViewBag.Content = "<p>你好,我现在测试一个东西.</p& ...
- like 内容转义
如题,当SQL语句中使用Like查询,且期望匹配的结果中含有"\"的,应当把"\"替换为"\\\\". 比如数据库中text字段有以下三行: ...
- 设置Linux系统的LANG变量
设置linux系统的LANG变量 对于国内的Linux用户,经常烦恼的一个问题是:系统常常在需要显示中文的时候却显示成了乱码,而由于某些原因,需要英文界面的系统的时候,却苦于系统不能正常输入和显示中文 ...
- Wpf binging (二) 集合绑定
除去简单控件的数据绑定,还有集合控件的数据绑定,一下示例 这发现 source 变成了 itemsSource Path 变成了 DisplayMemberPath itemsSource:代 ...
- 微信小程序笑话小程序实践开发学习
首先做出笑话展示页面 1.修改app.json文件,在"pages"中添加一条 "pages/joke/joke",然后ctrl+s就可以自动创建joke文件夹 ...
- select中想要加a链接 并且新窗口打开
//新窗口打开 <select id="" onchange="window.open(this.value)"> <option value ...
- JAVA003-变量、数据类型
一.变量的三个元素:变量名(房间名字).变量类型(房间的类型).变量值(入住的人). 二.变量的命名规则: 1.驼峰法 2.尽量简单,见名知意 3.长度没有限制 4.满足标志符 ...
- 完美解决win10家庭版本系统无法远程连接问题
版权声明:本文转载.原文: https://blog.csdn.net/rainmaple20186/article/details/80913191 近期接入同一局域网的服务器,发现在连接的时候,报 ...
- 我的代码-sql query
# coding: utf-8 # In[ ]: WITH List AS (SELECT e.*,f.* FROM( SELECT DISTINCT c.lot_id, c.wafer_key,LE ...