前端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服务端渲染>,主要说明了相关概念,以及为什么使用等,昨天的一个小栗子因为时间问题,没有好好的给大家铺开来讲 ...
随机推荐
- Swing学习2——图标添加Icon接口使用
废话没有,看代码. 主要就是通过实现Icon接口在标签添加一个圆形图标,并在框架中显示. package com.sword.swing_test; import javax.swing.*; imp ...
- Openresty 操作Cookie
Openresty 操作cookie共有两种方法: 1.直接操作 1.1 获取Cookie 获取所有cookie: ngx.var.http_cookie, 这里获取的是一个字符串,如果不存在则返回n ...
- python编程从入门到实践 alien invasion 项目源码
现在上传一个 python编程从入门到实践 alien invasion 项目源码 以供大家学习参考 跟官方版本可能不太一样,因为是自己写的 也算是给新手一个参考 我用的环境是pycharm 可能需要 ...
- Linux三个网络监视器之《二》——nethogs
当你想要快速了解谁占用了你的带宽时,Nethogs 是快速和容易的.以 root 身份运行,并指定要监听的接口.它显示了空闲的应用程序和进程号,以便如果你愿意的话,你可以杀死它. 1 1.在这个网址f ...
- React native 中 SectionList用法
一.代码 import React, { Component } from 'react'; import { AppRegistry, View, Text, SectionList, } from ...
- PHP基本随笔
1:制作一个永不重复的数字: private function getMillisecond(){ list($t1, $t2) = explode(' ', microtime()); return ...
- 基于CDH5.12安装Kylin及官方用例测试
1 kylin 简介 Apache Kylin是2013年由eBay 在上海的一个中国工程师团队发起的.基于Hadoop大数据平台的开源 OLAP引擎,它采用多维立方体预计算技术,利用空间换时间的方法 ...
- 【Linux】awk指令
介绍: awk是一种可以处理数据,产生格式化报表的语言.其工作方式是读取数据文件,将每一行数据视为一条记录,没笔记录按分隔符(默认空格)分割成若干字段,输出各字段的值. 实例: [jboss@vm-k ...
- 商品规格,自定义SKU类型
<html> <head> <script type="text/javascript" src="http://xoxco.com/exa ...
- syslog日志打印
最近syslog出了一次问题,我们配置了不同appname打印到不同文件.现在用不同appname打印log的时候,偶然会混在一起.检查过配置后,觉得不是配置问题,如果是配置问题应该每一条都会打错位置 ...