抓取动态网页(谷歌能DOM是什么?Google不能是如何抓取JavaScript的)
优采云 发布时间: 2022-02-23 07:03抓取动态网页(谷歌能DOM是什么?Google不能是如何抓取JavaScript的)
以下是我们通过测试 Google 的抓取工具如何抓取 JavaScript 的经验。认为 Google 无法处理 JavaScript?再想一想。 Audette Audette 分享了一系列测试的结果,他和他的同事测试了 Google 和 收录 抓取了哪些类型的 JavaScript 功能。
长话短说
我们进行了一系列测试,并确认 Google 可以通过多种方式执行和 收录 JavaScript。我们还确认 Google 可以渲染整个页面并读取 DOM,从而收录动态生成内容。
DOM 中的 SEO 信号(页面标题、元描述、规范标签、元机器人标签等)都得到了处理。动态插入 DOM 的内容也可以被爬取和收录。此外,在某些情况下,DOM 甚至可能优先于 HTML 源语句。虽然这需要更多的工作,但这是我们已经完成的几个测试之一。
简介:Google 执行 JavaScript 并读取 DOM
自 2008 年以来,Google 一直在成功抓取 JavaScript,但可能只是以某种方式。
而今天,很明显,Google 不仅能够计算出它们爬取的 JavaScript 类型和 收录,而且在渲染整个网页方面也取得了重大进展(尤其是在过去 12 到 18 年)月亮)。
在 Merkle,我们的 SEO 技术团队希望更好地了解 Google 爬虫抓取的 Javascript 事件类型以及 收录。经过研究,我们发现了令人瞠目结舌的结果,证实 Google 不仅可以执行各种 JavaScript 事件,还可以执行 收录 动态生成的内容。怎么做? Google 可以读取 DOM。
什么是 DOM?
许多 SEO 从业者不了解文档对象模型 (DOM) 是什么。
当浏览器请求页面时会发生什么,以及 DOM 如何参与。
在 Web 浏览器中使用时,DOM 本质上是一个应用程序接口或 API,用于标记和结构化数据(例如 HTML 和 XML)。该界面允许网络浏览器将它们组合成文档。
DOM 还定义了如何获取和操作结构。虽然 DOM 是一种独立于语言的 API(不依赖于特定的编程语言或库),但它通常用于 JavaScript 和 Web 应用程序中的动态内容。
DOM 表示将网页连接到编程语言的接口或“桥梁”。解析 HTML 和执行 JavaScript 的结果就是 DOM。网页的内容不是(不仅是)源代码,它是 DOM。这使得它非常重要。
JavaScript 如何通过 DOM 接口工作。
我们很高兴地发现 Google 可以读取 DOM 并解析信号并动态插入内容,例如标题标签、页面文本、头部标签和元注释(例如 rel=canonical)。在此处阅读完整的详细信息。
这一系列的测试和结果
因为我们想知道会抓取哪些 JavaScript 功能并且收录,我们仅在 Google Crawl 上创建了一系列测试。确保通过创建控件独立理解 URL 活动。下面,让我们详细分解一些有趣的测试结果。它们分为 5 类:
JavaScript 重定向 JavaScript 链接 动态插入内容 动态插入元数据和页面元素 rel = “nofollow”的重要示例
示例:测试 Google 爬虫理解 JavaScript 能力的页面。
JavaScript 重定向
我们首先测试了常见的 JavaScript 重定向,如果 URL 以不同的方式表示,结果会是什么?我们为两个测试选择了 window.location 对象:测试 A 使用绝对 URL 调用 window.location,而测试 B 使用相对路径。
结果:重定向很快被 Google 跟踪。从 收录 的角度来看,它们被解释为 301 - 最终状态 URL 替换了 Google 收录 中的重定向 URL。
在随后的测试中,我们使用权威页面上完全相同的内容执行 JavaScript 重定向到同一站点上的新页面。而原创网址是谷歌热搜的首页。
结果:果然,重定向被谷歌跟踪,而原创页面不是收录。而新的 URL 是 收录 并立即在同一个查询页面中排名相同的位置。这让我们感到惊讶,因为从排名的角度来看,它似乎表明 JavaScript 重定向的行为(有时)很像永久 301 重定向。
下次您的客户想要为他们的 网站 完成 JavaScript 重定向移动时,您可能不需要回答,或者回答:“请不要”。因为这似乎有转移排名信号的关系。支持这一结论的是对 Google 指南的参考:
使用 JavaScript 重定向用户可能是一种合法的做法。例如,如果您将登录用户重定向到内部页面,您可以使用 JavaScript 执行此操作。在检查 JavaScript 或其他重定向方法时,请确保您的网站遵循我们的指南并考虑其意图。请记住,最好将 301 重定向到您的 网站,但如果您无权访问您的 网站 服务器,则可以为此使用 JavaScript 重定向。
JavaScript 链接
我们用各种编码测试了不同类型的 JS 链接。
我们测试下拉菜单的链接。搜索引擎历来无法跟踪此类链接。我们想确定是否会跟踪 onchange 事件处理程序。重要的是,这只是我们需要的特定执行类型:其他更改的效果,而不是上面 JavaScript 重定向的强制操作。
示例:Google Work 页面的语言选择下拉菜单。
结果:链接被完全抓取和关注。
我们还测试了常见的 JavaScript 链接。以下是最常见的 JavaScript 链接类型,而传统的 SEO 建议使用纯文本。这些测试包括 JavaScript 链接代码:
作用于外部 href 键值对 (AVP),但在标签内部 ("onClick") 作用于 href 内部 AVP ("javascript:window.location") 作用于标签外部,但在 href (" javascript : openlink()") 等
结果:链接被完全抓取和关注。
我们的下一个测试是进一步测试事件处理程序,例如上面的 onchange 测试。具体来说,我们希望利用事件处理程序来进行鼠标移动,然后隐藏 URL 变量,该变量仅在事件处理程序(本例中为 onmousedown 和 onmouseout)被触发时执行。
结果:链接被完全抓取和关注。
构建链接:我们知道 Google 可以执行 JavaScript,但希望确保他们可以读取代码中的变量。所以在这个测试中,我们连接可以构造 URL 字符串的字符。
结果:链接被完全抓取和关注。
动态插入内容
显然,这些是要点:文本、图像、链接和导航的动态插入。高质量的文本内容对于搜索引擎理解网页主题和内容至关重要。在这个充满活力的网站时代,它的重要性不容质疑。
这些测试旨在检查在两种不同场景中动态插入文本的结果。
测试搜索引擎是否可以计算页面 HTML 源代码中动态插入的文本。
测试搜索引擎是否可以计算来自页面 HTML 源外部(在外部 JavaScript 文件中)的动态插入文本。
结果:在这两种情况下,文本都被抓取并 收录,页面根据该内容进行排名。酷!
为了了解更多信息,我们测试了一个用 JavaScript 编写的客户端全局导航,其中收录通过 document.writeIn 函数插入的链接,并确定它们已被完全抓取和跟踪。需要注意的是:Google 可以解释使用 AngularJS 框架和 HTML5 History API (pushState) 构建的 网站,可以渲染和 收录,并像传统的静态网页一样对其进行排名。这就是为什么不禁止 Google 的爬虫获取外部文件和 JavaScript 很重要,这可能也是 Google 将其从支持 Ajax 的 SEO 指南中删除的原因。当您可以简单地呈现整个页面时,谁需要 HTML 快照?
经过测试,发现无论内容类型如何,结果都是一样的。例如,图像被抓取并将 收录 加载到 DOM 中。我们甚至做了一个测试,通过动态生成结构化数据并将其插入到 DOM 中来制作面包屑。结果呢?成功插入的面包屑出现在搜索结果(搜索引擎结果页面)中。
值得注意的是,Google 现在建议对结构化数据使用 JSON-LD 标记。相信以后还会有更多基于此的。
元数据和页面元素的动态插入
我们将各种 SEO 关键标签动态插入 DOM:
标题元素元描述元机器人规范标签
结果:在所有情况下,标签都被提取并表现得像 HTML 源代码中的元素。
一个有趣的补充实验可以帮助我们理解优先级。当有相互冲突的信号时,哪一个获胜?如果源代码中有 noindex、nofollow 标签,而 DOM 中有 noindex、follow 标签,会发生什么?在此协议中,HTTP x-robots 响应标头作为另一个变量的行为如何?这将是未来综合测试的一部分。但是,我们的测试表明,当发生冲突时,Google 会忽略源代码中的标签,转而使用 DOM。
rel="nofollow" 的一个重要例子
我们想测试 Google 如何处理出现在源代码和 DOM 中的链接级别的 nofollow 属性。因此,我们创建了一个未应用 nofollow 的控件。
对于nofollow,我们分别测试源代码和DOM生成的注解。
源代码中的nofollow 可以按预期工作(未遵循链接)。并且 DOM 中的 nofollow 不起作用(链接被跟踪,页面为 收录)。为什么?因为修改 DOM 中的 href 元素为时已晚:在执行添加 rel=”nofollow” 的 JavaScript 函数之前,Google 已准备好抓取链接并排队等待 URL。但是,如果将带有 href="nofollow" 的 a 元素插入 DOM,nofollow 和链接将被跟踪,因为它们是同时插入的。
结果
从历史上看,各种 SEO 建议都是尽可能关注“纯文本”内容。动态生成的内容、AJAX 和 JavaScript 链接可能会损害主要搜索引擎的 SEO。显然,这对谷歌来说不再是问题。 JavaScript 链接的行为类似于普通的 HTML 链接(这只是表面,我们不知道幕后发生了什么)。
JavaScript 重定向被视为 301 重定向。无论是在 HTML 源代码中,还是在解析初始 HTML 后触发 JavaScript 生成 DOM,动态插入的内容,甚至是 rel 规范注释等元标记都被视为相同。 Google 似乎能够完全呈现页面并理解 DOM,而不仅仅是源代码。太不可思议了! (请记住允许 Google 的爬虫获取那些外部文件和 JavaScript。)Google 已经在创新,以惊人的速度将其他搜索引擎甩在后面。我们希望在其他搜索引擎中看到同样类型的创新。如果他们要在 Web 的新时代保持竞争力并取得实质性进展,那就意味着更好地支持 HTML5、JavaScript 和动态网站。
对于搜索引擎优化,对以上基本概念和谷歌技术不了解的人,应该好好研究和学习,以赶上当前的技术。如果你不考虑 DOM,你可能会失去一半的份额。