js 爬虫抓取网页数据(谷歌爬虫是如何抓取javascript的?不能处理javascript?)

优采云 发布时间: 2021-12-28 14:16

  js 爬虫抓取网页数据(谷歌爬虫是如何抓取javascript的?不能处理javascript?)

  我们测试了谷歌爬虫是如何抓取javascript的,以下是我们从中学到的知识。

  认为 Google 无法处理 javascript?再想一想。audette audette 分享了一系列的测试结果,他和他的同事们测试了谷歌会抓取和收录什么类型的javascript函数。

  

  长话短说

  1. 我们进行了一系列测试,并确认 Google 可以以多种方式执行和收录

javascript。我们还确认 Google 可以渲染整个页面并读取 dom,其中可以收录

动态生成的内容。

  2. dom中的seo信号(页面标题、meta描述、canonical标签、meta robots标签等)都是关注的。动态插入

  dom 的内容也可以被抓取和收录

。另外,在某些情况下,dom甚至可能比html更好

  源代码语句优先。虽然这需要更多的工作,但这是我们的几个测试之一。

  简介:google 执行javascript & 读取dom

  早在2008年,google就成功爬取了javascript,但很可能仅限于某种方式。

  今天,很明显,谷歌不仅可以计算出他们抓取和收录

的 javascript 类型,而且在呈现整个网页方面也取得了重大进展(尤其是在过去的 12 到 18 个月内)。

  在merkle中,我们的seo技术团队想更好地了解什么类型的javascript可以被谷歌爬虫抓取和收录

  事件。经过研究,我们发现了惊人的结果,并确认 Google 不仅可以执行各种 javascript

  事件,并且可以包括动态生成的内容。怎么做?谷歌可以读取dom。

  什么是dom?

  很多搞seo的人不明白什么是文档对象模型(dom)。

  

  当浏览器请求一个页面时会发生什么,以及 dom 如何参与其中。

  在 Web 浏览器中使用时,dom 本质上是一个应用程序接口或 api,用于标记和构建数据(例如 html 和 xml)。该接口允许 Web 浏览器将它们组合成一个文档。

  dom 还定义了如何获取和操作结构。尽管 dom 是一种独立于语言的 API(不绑定到特定的编程语言或库),但它通常用于 javascript 和 Web 应用程序的动态内容。

  dom 代表一个接口或“桥”,它将网页与编程语言连接起来。解析html并执行javascript的结果是dom。网页的内容不是(不仅)源代码,而是dom。这使它变得非常重要。

  

  javascript 如何通过 dom 接口工作。

  我们很高兴地发现 Google 可以读取 dom,并且可以解析信号和动态插入的内容,例如标题标签、页面文本、标题标签和元注释(例如:rel = canonical)。您可以阅读完整的详细信息。

  这一系列的测试和结果

  因为想知道哪些javascript函数会被抓取和收录,所以分别在Google爬虫上做了一系列的测试。通过创建控件,确保可以独立理解 url 活动。下面,让我们详细介绍一些有趣的测试结果。它们分为5类:

  javascript重定向

  javascript链接

  动态插入内容

  动态插入元数据和页面元素

  rel = "nofollow" 的一个重要例子

  

  示例:用于测试 Google 抓取工具理解 javascript 能力的页面。

  1. javascript 重定向

  我们首先测试了常见的javascript重定向,不同方式表达的URL会有什么结果呢?我们选择了 window.location

  该对象执行两个测试:测试 a 使用绝对路径 url 调用 window.location,测试 b 使用相对路径。

  结果:重定向很快就被谷歌跟踪了。从收录

的角度来看,它们被解释为 301——最终状态 URL 替换了谷歌收录

的重定向 URL。

  在后续的测试中,我们在权威网页上使用了完全相同的内容,使用javascript完成了一个新的页面重定向到同一个站点。原创

网址在 Google 热门查询的首页上排名。

  结果:果然,重定向被谷歌跟踪了,但是没有收录

原创

页面。新的 url 被收录

在内,并立即在同一查询页面中的同一位置排名。这让我们感到惊讶。从排名的角度来看,JavaScript 重定向行为(有时)似乎与永久性 301 重定向非常相似。

  下次,您的客户想要为他们的网站完成 javascript 重定向操作,您可能不需要回答,或者回答:“请不要”。因为这好像有转职排名信号的关系。引用谷歌的指导方针支持这一结论:

  使用 javascript 重定向用户可能是一种合法的做法。例如,如果您将登录用户重定向到内部页面,您可以使用

  javascript 完成此操作。在仔细检查 javascript 或其他重定向方法时,请确保您的网站遵循我们的指南并考虑其意图。记住

  301 重定向是重定向到您网站的最佳方式,但如果您无权访问您的网站服务器,您可以为此使用 javascript 重定向。

  2. javascript 链接

  我们用多种编码方式测试了不同类型的js链接。

  我们测试下拉菜单的链接。历史搜索引擎一直无法跟踪此类链接。我们要确定是否会跟踪 onchange 事件处理程序。重要的是,这只是特定类型的执行,而我们需要的是:其他变化的影响,而不是像上面javascript重定向的强制操作。

  

  示例:google 工作页面上的语言选择下拉菜单。

  结果:链接被完全抓取和跟踪。

  我们还测试了常见的 javascript 链接。下面是最常见的 javascript 链接类型,而传统的 seo 推荐纯文本。这些测试包括 javascript 链接代码:

  作用于外部 href 键值对 (avp),但在标签内(“onclick”)

  函数 href 内部 avp("javascript: window.location")

  在 a 标签之外执行,但在 href 中调用 avp("javascript: openlink()")

  等等

  结果:链接被完全抓取和跟踪。

  我们接下来的测试是进一步测试事件处理程序,比如上面的onchange测试。具体来说,我们要使用鼠标移动的事件处理程序,然后隐藏 url 变量,该变量仅在事件处理函数(本例中为 onmousedown 和 onmouseout)被触发时执行。

  结果:链接被完全抓取和跟踪。

  构造链接:我们知道谷歌可以执行javascript,但是我们想确认他们是否可以读取代码中的变量。所以在这个测试中,我们连接了可以构造url字符串的字符。

  结果:链接被完全抓取和跟踪。

  3. 动态插入内容

  显然,这些是要点:动态插入文本、图像、链接和导航。高质量的文本内容对于搜索引擎理解网页的主题和内容至关重要。在这个动态网站的时代,它的重要性是毋庸置疑的。

  这些测试旨在检查在两种不同场景中动态插入文本的结果。

  1)。测试搜索引擎是否可以统计动态插入的文本,文本来自页面的html源代码。

  2)。测试搜索引擎是否可以统计动态插入的文本,并且文本来自页面的html源代码之外(在外部javascript文件中)。

  结果:两种情况下,文本都可以被抓取并收录,页面根据内容进行排名。凉爽的!

  为了深入了解,我们测试了一个用javascript编写的客户端全局导航,导航中的链接全部通过

  document.writein 函数插入并确认它们可以被完全抓取和跟踪。需要指出的是:谷歌可以解释angularjs框架的使用和

  html5历史api(pushstate)搭建的网站可以渲染和收录,和传统静态网页一样排名。这并不是禁止 Google 抓取工具

  获取外部文件和javascript的重要性,这可能是google从《Ajax Supporting SEO指南》开始的

  删除它的原因。当您可以简单地渲染整个页面时,谁需要 html 快照?

  经过测试,发现无论是什么类型的内容,结果都是一样的。例如,图像将在加载到 dom 后被捕获并收录

在内。我们甚至做了这样的测试:通过动态生成

  将数据构造成面包屑(面包屑导航),并插入到dom中。结果呢?

  成功插入后的面包屑出现在搜索结果(搜索引擎结果页面)中。

  值得注意的是,Google 现在推荐使用 json-ld 标签来形成结构化数据。我相信未来会有更多基于此的东西。

  4. 动态插入元数据和页面元素

  我们动态地将各种对 seo 至关重要的标签插入到 dom 中:

  标题元素

  元描述

  元机器人

  规范标签

  结果:在所有情况下,标签都可以被抓取并表现得像 html 源代码中的元素。

  一个有趣的补充实验可以帮助我们理解优先级的顺序。当出现相互矛盾的信号时,哪一个会获胜?如果源代码中没有index和nofollow标签,dom

  如果没有index和follow标签,会发生什么?在这个协议中,http x-robots

  如何将响应头的行为用作另一个变量?这将是未来全面测试的一部分。但是,我们的测试表明,当发生冲突时,Google 会忽略源代码中的标签并支持 dom。

  5. rel="nofollow" 的一个重要例子

  我们想测试谷歌如何响应出现在源代码和dom的链接级别的nofollow属性。我们还创建了一个没有 nofollow 的控件。

  

  对于nofollow,我们分别测试源码和dom生成的注解。

  源代码中的 nofollow 按预期工作(不跟踪链接)。和 dom 中的 nofollow

  但它失败了(跟踪链接并收录

页面)。为什么?因为修改dom中href元素的操作发生得太晚了:Google正在执行添加

  在 rel="nofollow" 的 javascript 函数之前,链接已准备好被抓取,队列正在等待 url。但是,如果会有href

  将=”nofollow”的a元素插入到dom中,nofollow和链接同时插入,所以会被跟踪。

  结果

  从历史的角度来看,各种 seo 建议都尽可能关注“纯文本”内容。以及动态生成的内容,ajax 和 javascript

  链接会损害主流搜索引擎的 seo。显然,这对谷歌来说不再是问题。javascript 链接类似于普通的 html

  链接模式操作(这只是表面,我们不知道程序在幕后做了什么)。

  JavaScript 重定向的处理方式与 301 重定向类似。

  动态插入内容,甚至元标记,例如rel规范注释,无论是在html源代码中还是在解析初始html后触发javascript生成dom都以相同的方式处理。

  Google 依赖于能够完全呈现页面并理解 dom,而不仅仅是源代码。太不可思议了!(记住要允许 Google 爬虫获取这些外部文件和 javascript。)

  谷歌已经以惊人的速度在创新方面将其他搜索引擎甩在了后面。我们希望在其他搜索引擎中看到相同类型的创新。如果他们要在新的网络时代保持竞争力并取得实质性进展,就意味着他们必须更好地支持html5、javascript和动态网站。

  对于seo,不了解以上基本概念和google技术的人,应该学习学习,追赶当前的技术。如果你不考虑dom,你可能会失去一半的份额。

  并非本文所表达的所有观点均由搜索引擎领域(搜索引擎网站)提供,部分观点由客座作者提供。所有作者的名单。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线