随着web2.0的兴起,ajax的时代已经成为了事实,更如今 Knockout,backbone, angular,ember前端MDV(model driver view)框架强势而来,Single Page Application已经为大家所熟悉了。如今常见的SPA程序,restfull和前端MDV之类的框架能够实实在在的减少我们的代码开发量,让我更 多的注意力关注在真正的业务逻辑上。在众多前端MDV框架从博客中可以看出来笔者还是钟爱于angular,然而服务端平台的选择的话:在.net平台笔 者会首选webapi+oData,jvm平台spring restfull。

但是相应带来的是搜索引擎优化(SEO)是个难题,因为爬虫不会去执行JavaScript。现在很幸运的是在Google推出angular之后,也给出了一些解决方案:Google's ajax crawling protocol.此协议现在已被Google和bing所实现。

在协议中规定,搜索引擎会把带有#!someurl的链接转换为escaped_fragment=someurl访问解析,例如:

1
www.example.com/ajax.html#!key=value

  

将会变为

1
www.example.com/ajax.html?_escaped_fragment_=key=value

  

所以如果我们需要更好的SEO的支持的话,我们可以从现在开始把我们程序中的#变为#!,特别angular程序,因为框架原声支持对#!的解析。

基于这个协议和phantomjs(headless的浏览器内核)我们的SPA SEO工具 prerender(http://prerender.io/)应运而生,在官方和社区的支持下,现在已经有node.js express,ruby on rails,java,asp.net,php,python主流框架和nginx之类的支持。

prerender架构流程图如下:

prerender分为两个部分一部分为后端云服务和应用程序客户端,客户端主要拦截来自爬虫的请求在转发到后端云服务处理返回处理后并且去掉多余script/css的html在返回给爬虫。

后端云服务(nodejs项目),利用phantomjs这个无ui headless的浏览器内核加载页面地址,并等到页面解析后获取document html,并处理去掉无用的部分返回到前段客户端程序。

而前段程序则为不同语言框架而实现的不同拦截器,如java的filter,asp.net mvc的HttpModule,主要任务为拦截请求并转发给后端云服务处理。其拦截规则为:

  1. 检查url中是否带有escaped_fragment或者请求user-agent是已知或者配置的爬虫user-agent
  2. 确认拦截的不是js,css之类的资源文件
  3. 在确认url是在白名单中(可选如果配置的白名单的话)
  4. 确认不应该在黑名单中(可选如果配置了黑名单的话)

注:最好值配置黑名单或者白名单中的一种方式。

有了prerender,因为SEO而放弃SPA不再是理由了,关于prerender的任何issue大家可以及时提出,让它更加完善。具体关于如何使用和测试请转向主页和各个client程序页面,http://prerender.io/

[转] prerender-SPA程序的SEO优化策略的更多相关文章

  1. prerender-SPA程序的SEO优化策略

    随着web2.0的兴起,ajax的时代已经成为了事实,更如今Knockout,backbone, angular,ember前端MDV(model driver view)框架强势而来,Single ...

  2. 百度官方给出的seo优化策略

    http://www.wocaoseo.com/thread-157-1-1.html 因为要参加seo工程师考试了,这两天一直在学习seo的基础理论,昨天也写了备战seo工程师考试的文章,说实在话, ...

  3. SEO优化策略

    原文:http://www.upwqy.com/details/186.html 1 首先了解seo是什么 SEO是英文Search Engine Optimization的缩写,中文译为" ...

  4. 黄聪:Discuz!的SEO优化策略一:如何设置标题 & 如何去掉Powered by Discuz!尾巴

    1.如何设置标题 进入 管理中心 -- 全局 -- SEO设置 -- 论坛 -- 标题 ,设置你的网站标题和描述. PS:有人问keywords要不要设置,其实现在keywords对SEO的影响已经微 ...

  5. 大型网站SEO优化策略框架

  6. 黄聪:Discuz!的SEO优化策略二:如何去掉页脚多余的信息

    论坛搭建好,首先是把多余的东西都砍掉. 页脚的信息在我看来,都是很多余的信息,如下图: 要怎么消灭掉它们呢? 1.进入 全局 -- 站点信息 2.站点名称改为你的论坛名称,它会出现在内页的标题最末位. ...

  7. seo优化做起来不是哪么简单,其实需要的是思维

          SEO百科:随着人们互联网的认识水平的提升,SEO似乎也已经得到了更多的认识.无论是浅显还是深入,SEO一直被大众认为是简单的,甚至是不值得一提的东西,甚至认为SEO无非就是作弊,SEO并 ...

  8. vue spn如何做seo优化

    vue spn如何做seo优化 突然来了一个需求,对已有的项目做SEO优化,WHAT? 总所周知,spn对seo不够优化,因而官方考虑到直接使用ssr 一个不算解决办法的办法prerender-spa ...

  9. 前后端分离项目采用Prerender的SEO优化流程

    原文: https://blog.ccyws.cn/articles/4 一.概述 近年开发模式变化,新建Web站点采用前后端分离部署已经是大势所趋.但是,搜索引擎爬虫不会执行js脚本从后端加载数据, ...

随机推荐

  1. CSS远程加载字体

    CSS 远程加载字体的方法,做网站CSS的都知道,用户浏览网站时,网页上的字体是加载本地的.换言之,如果网站使用了用户电脑所没有安装的字体,那显示字体就会被默认字体所代替了,自然效果就大受影响了. 上 ...

  2. 机器学习实验报告:利用3层神经网络对CIFAR-10图像数据库进行分类

    PS:这是6月份时的一个结课项目,当时的想法就是把之前在Coursera ML课上实现过的对手写数字识别的方法迁移过来,但是最后的效果不太好… 2014年 6 月 一.实验概述 实验采用的是CIFAR ...

  3. windows7任务栏上的图标修复

    Technorati 标记: 疑难杂症   今天,我在使用Windows 7的时候,因为操作一些系统文件,发现桌面下角的个别正在运行的图标不见了,但是,我们如果再打开一个新程序,又会提醒你已经在运行了 ...

  4. HTML部分标签的含义(3)

    1,<a>标签,链接到另一个页面 语法:<a href="目标网址" title=“鼠标滑过显示的文本”>链接显示的文本</a> title属性 ...

  5. nth_element学习

    今天学习到STL中的nth_element,她是一个默认能求第k小的数的方法,需要的头文件为algorithm. 默认为:nth_element(start, start+n, end) 使第n大元素 ...

  6. 【转】app后端如何选择合适的数据库产品

    转自:http://blog.csdn.net/newjueqi/article/details/44003503 app后端的开发中,经常要面临的一个问题是:数据放在哪里? mysql ?redis ...

  7. 解决Ext.TextField的AllowBlank不能过滤空格代码

    Ext过滤空格 重写了组件... Ext.apply(Ext.form.TextField.prototype, { validator : function(text) { if (this.all ...

  8. Hotel

    poj3667:http://poj.org/problem?id=3667 题目大意:Hotel有N(1 ≤ N ≤ 50,000)间rooms,并且所有的rooms都是连续排列在同一边,group ...

  9. MYSQL的binary解决mysql数据大小写敏感问题 《转载》

    BINARY不是函数,是类型转换运算符,它用来强制它后面的字符串为一个二进制字符串,可以理解为在字符串比较的时候区分大小写如下:mysql> select binary 'ABCD'='abcd ...

  10. GPIO模拟串口注意是事项

    GPIO模拟串口需要注意的事项如下:(程序见我的博客第一篇) 1.由于串口是异步通信,则串口发送必须满足宽度要求. (1)假设串口的波特率是9600bps(1s传输9600个bit),则传输1bit需 ...