[原创]关于Google搜索引擎抓录js内容的一点摸索

简介: 昨日微博上发了一条关于Google收录js以及Ajax,Flash内容的短信,有几位朋友颇感兴趣,于是在这里略微详细的做一些说明。       首先看这篇文章的前提是假设读者已经对搜索引擎的收录原理有所了解。

    昨日微博上发了一条关于Google收录js以及Ajax,Flash内容的短信,有几位朋友颇感兴趣,于是在这里略微详细的做一些说明。

 

    首先看这篇文章的前提是假设读者已经对搜索引擎的收录原理有所了解。一些基本的内容在我的书中已有比较详细的描述。

    不妨这里我们简单回顾一下比较通用和常见的收录过程(其中部分细节已略去,保留一些比较关键的步骤。我们只看过程,不讨论特殊的行为及其是否合理):

 

  1. 提交你的网站,或你的网站被搜索引擎关注到(通过其他网站外链等方式)。
  2. 开始分析你的robots.txt文件(如果存在),确定哪些内容需要过滤,哪些内容可以直接关注。
  3. 默认情况下从默认首页(或指定网页)开始爬行,请求过程相当于从浏览器打开并获取第一个文本信息(成功为200),一般情况下不会刻意再去请求你的js和css等关联内容。
  4. 如果碰到302和301跳转,则对跳转后的页面执行第3步。当然一般对跳转次数都会有限制,特别是死循环(昨天发现Google的一些功能在中文状态下也有页面会出现这个情况)。不支持30x跳转的搜索引擎是很少的。
  5. 获取到内容后,对title,keywork,description,h1,nav等重要内容进行识别并收录,同时应对编码问题(此处略去一万字),然后将网页保存到搜索引擎上(假设没有违规和作弊的情况)。于此同时,爬行机器人会分析网页中的链接(一般为<a>标签中的href属性,当然<a>内容</a>中的“内容”也会被作为一个轻量级的关键字考量)。如果碰到40x及50x的网页,通常不会被正式收录,并跳过进行下一个。
  6. 对于分析到的链接,判断是否在本站范围内,如果是,回到第3条继续爬行。

    言归正传。

    对于Google是否真的能够收录js及ajax中的内容,是开始于Google推出的网页缩略图,无意间发现我的某个网站通过ajax获取到的信息居然被正常地显示在缩略图中(而且是通过json返回之后再处理的)。于是对此发生了兴趣。

     于是做出了如下假设及实验(有部分试验从数月前已经开始,所有试验内容尚未结束,但已经可以得出一些初步的结论,可待进一步验证):

 

  1. 假设:Google可以爬行js中的内容(这是执行ajax的一个前提)。
    试验:直接放了一段包含完整url的ajax过程上去(同时使用xmlhttp直接访问以及使用jQuery.get()两种方式),且此url在整个网站(网络)中只在此处出现。
    结果:该url(对应的网页)被收录。
    结论:1) Google爬行的内容除了中联及标签及<body>中的html,已经涉及到或者至少没有回避<script>标签中的js。2)通过这个试验无法确定Google是真的可以执行(或分析)js,还是只是使用正则等一系列手段强制获取js中的url。

  2. 假设:Google可以执行部分简单的js内容。
    试验:将上述试验代码中的url拆分(比如将"http://www.senpar.com/Home.xhtml?id=123&add=1"拆分为"http://www.senpar.com/Home.xhtml?id=123“ + ”&add=1",甚至将结果封装,比如"http://www.senpar.com/Home.xhtml?id=123“+getAddParams()),这样不影响js中字符串的结果,但是会打破正则和一系列判断的规范,对于无法执行js的机器人,最多只能收录前半段字符串,或者连整个带加号的过程一起收录进去(注:
    如单独http://www.senpar.com/Home.xhtml?id=123
    会显示404错误)。
    结果:查询收录情况并利用Google Webmaster跟踪后发现,Google认为http://www.senpar.com/Home.xhtml?id=123为404无法找到,并没有收录实际的url。
    结论:1) Google机器人无法执行和解析真正的js内容,我们所看到的从js中抓录的页面,只是从简单的规则中提取出来,并试图访问。2)既然无法执行js,ajax访问几乎成为不可能。 3)缩略图中关于ajax载入的效果,可能由专门的线程负责,可执行js或调用ajax中的内容,相当于使用浏览器核心生成一个页面(这个在技术上也已经不是难题)。仔细观察发现,这个效果图的效果,还挺像Chrome中的效果(可以通过一系列hack方法测试)。

  3. 假设:Google对于Flash内容也可以收录。
    试验:(这个试验很久之前就做了,只是这次加入了js的对照)分别放置2段Flash内容(分别包含一段唯一的文字,以及分别一个唯一链接),其中一段由js载入,另外一段使用<object>代码载入。
    结果:2种方法载入的Flash均无法在Google缩略图中显示(显示成白色区域或替代成未安装Flash插件状态),但是Flash中的文本内容均被收录。
    结论:1) 生成缩略图的浏览器核心(或故意)没有安装Flash插件。 2) 根据swf文件的url,Flash可以被单独抓录并分析。
    推论:如果js引入Flash的方式,将swf文件地址拆分,可能也无法被收录。原理同2中的ajax地址。

  4. 假设:Google对Silverlight可以收录。
    试验:放置一个Silverlight(通过object载入,此处先不对js判断),设置未安装Silverlight状态的特殊图片。
    结果:缩略图显示了未安装Silverlight状态的图片。Silverlight中内容未被收录。
    结论:1) 生成缩略图的浏览器核心没有安装Silverlight插件 2) Google爬行机器人无法识别Silverlight的xap压缩包(其实要实现解压并爬行其中的xmal文件不难,过程和爬行flash是类似的)。

 

    目前完成的有这4个,还有一些有待确定的结果出现。欢迎大家补充。

 

    从上面的结论中,我们也可以有一些小小的启发,比如: 当有些链接你希望被大量关注和收录,但是不想显示在页面中(或者很希望使用ajax异步载入)——也不想用display:none的方法引发作弊的风险抑或iframe这么尴尬的做法——你可以使用js,并保证url在一个完整的字符串中。反之,你可以很好规避某些url被收录的风险——当然你可也可以选择robots.txt的disallow等。另外如果你的来源以Google为主,那么对于简单的Flash导航之类的不用那么惧怕了,留个心眼就行了。

 

    写此文旨在能够更准确地把握搜索机器人的一些较为隐秘的行为,帮助大家更好地实施SEO。如果本文有任何疏漏或错误,欢迎补充和指出:)    

 

 

QQ:498977166

http://szw.cnblogs.com/
研究、探讨.NET开发
转载请注明出处和作者,谢谢!

 


微信开发深度解析:微信公众号、小程序高效开发秘籍
Senparc官方教程《微信开发深度解析:微信公众号、小程序高效开发秘籍》,耗时2年精心打造的微信开发权威教程,点击这里,购买正版

 

目录
相关文章
|
6月前
|
JavaScript 前端开发
Google Earth Engine(GEE)扩展——ee-polyfill JavaScript 方法 (ES6+)
Google Earth Engine(GEE)扩展——ee-polyfill JavaScript 方法 (ES6+)
42 1
|
2月前
|
人工智能 缓存 搜索推荐
百度/Bing/Google搜索引擎使用技巧
本文分享了百度、Bing和Google三大搜索引擎的实用技巧,涵盖精确匹配、排除关键词、站内及文件类型搜索等,如使用双引号进行精确搜索“人工智能应用”,排除特定词如“人工智能 -游戏”,以及在特定网站如“site:baidu.com 人工智能”内查找内容等,帮助提高搜索效率和准确性。
百度/Bing/Google搜索引擎使用技巧
|
6月前
|
JavaScript 测试技术
【sgGoogleTranslate】自定义组件:基于Vue.js用谷歌Google Translate翻译插件实现网站多国语言开发
【sgGoogleTranslate】自定义组件:基于Vue.js用谷歌Google Translate翻译插件实现网站多国语言开发
|
6月前
|
设计模式 前端开发 JavaScript
AngularJS是一款由Google收购的JavaScript结构框架
【5月更文挑战第2天】AngularJS是Google收购的JavaScript框架,用于构建动态Web应用,基于MVC模式,强调模块化和双向数据绑定。它简化了视图与模型的同步,通过语义化标签和依赖注入提升开发效率。适用于复杂单页面应用(SPA),但不适合DOM操作密集型或性能要求极高的场景。
71 0
|
6月前
|
JavaScript 前端开发 Java
MooTools、Backbone、Sammy、Cappuccino、Knockout、JavaScript MVC、Google Web Toolkit、Google Closure、Ember、Batman 以及 Ext JS。
MooTools、Backbone、Sammy、Cappuccino、Knockout、JavaScript MVC、Google Web Toolkit、Google Closure、Ember、Batman 和 Ext JS 都是 JavaScript 框架,用于开发 Web 应用程序。它们分别提供了不同的功能和特性,以帮助开发者更高效地构建和维护 Web 应用程序。
54 2
|
6月前
|
自然语言处理 搜索推荐 SEO
如何使用 Google 搜索引擎保姆级教程(附链接)
如何使用 Google 搜索引擎保姆级教程(附链接)
|
6月前
|
JavaScript 前端开发 定位技术
Google Earth Engine谷歌地球引擎GEE中JavaScript脚本语言代码基础规则与函数语句
Google Earth Engine谷歌地球引擎GEE中JavaScript脚本语言代码基础规则与函数语句
120 1
|
Web App开发 前端开发 JavaScript
《智能前端技术与实践》——第 2 章 前端开发基础 ——2.5 与 Google 扩展程序相关的 JavaScript API
《智能前端技术与实践》——第 2 章 前端开发基础 ——2.5 与 Google 扩展程序相关的 JavaScript API
104 0
|
SQL 开发框架 搜索推荐
你也可以是小hacker ,Google Hacking,好可怕的搜索引擎!
你也可以是小hacker ,Google Hacking,好可怕的搜索引擎!
221 0
你也可以是小hacker ,Google Hacking,好可怕的搜索引擎!
|
消息中间件 存储 自然语言处理
图解 Google V8 # 09:运行时环境:运行JavaScript代码的基石
图解 Google V8 # 09:运行时环境:运行JavaScript代码的基石
284 0
图解 Google V8 # 09:运行时环境:运行JavaScript代码的基石
下一篇
无影云桌面