所以我使用 AJAX
调用服务器文件,该文件使用 WordPress 填充 pages
内容并返回。我用它来填充字段。现在我感到困惑的是,我如何创建快照以及我必须做什么才能让谷歌知道我正在创建除了 #!
还有我为什么要这样做? escaped_fragments
有点不清楚,希望我能得到更详细的解释。有没有人有任何教程可以引导您完成与我正在做的类似的这个过程?
大卫
最佳答案
Google 的抓取工具通常不会运行您的 JavaScript。他们访问了您的页面,抓取了您的 HTML,然后继续前进。这比加载页面及其所有资源、运行 JavaScript、猜测所有内容何时加载完毕,然后从 DOM 中抓取数据要高效得多。
如果您的网站使用 AJAX 来填充页面内容,这对 Google 和其他公司来说是个问题。您的页面实际上是空的...没有任何内容...在其 HTML 状态下。它需要您的 JavaScript 来填充它。由于爬虫不运行您的 JavaScript,因此您的页面对爬虫来说并不是那么有用。
如今,有很多网站混合了基于网络的应用程序和内容驱动的网站之间的界限。这些站点(如您的站点)需要运行客户端代码才能获取内容。 Google 没有资源在他们遇到的每个站点上执行此操作,但他们确实提供了一个选项。那是 info you found about escaped anchor fragments .
Google 为您提供了为他们抓取完整 DOM 的机会。他们将运行 JavaScript 的 CPU 和内存负担重新加给了你。您可以通过使用带 #!
的链接向 Google 表示鼓励这样做。 Google 看到了这一点,知道他们可以请求相同的页面,但将 #!
之后的所有内容(未发送到服务器)转换为 ?_escaped_fragment_=
并制作对您的服务器的请求。此时,在 JavaScript 运行后,您的服务器应该生成完整 DOM 的快照。
好消息是,如今您不必破解大量代码即可完成此操作。我已经使用 PhantomJS 编写了一个服务器来执行此操作。 (我正在尝试获得打开源代码的许可,但它处于法律边缘,抱歉!)基本上,PhantomJS 是一个完整的 webkit 网络浏览器,但它运行时没有 GUI。你可以use PhantomJS to load your site ,运行所有 JavaScript,然后在它准备就绪时从页面中抓取 HTML 并将那个版本发送给 Google。这不需要你做任何特殊的事情,除了修复你的路由以在你的快照服务器上使用 _escaped_fragment_
指向请求。
您可以在大约 20 行代码中完成此操作。 PhantomJS 甚至内置了一个迷你网络服务器,但他们建议不要将其用于生产代码。
我希望这有助于消除一些困惑!
关于php - 为 Google 检索快照 HTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25538007/