0

我有一个页面,当页面加载时使用 javascript 函数创建链接时会构建一些链接,具体取决于页面的当前 url。单击时,ajax 调用会加载新页面。

如何使这些链接可被谷歌抓取(因为谷歌不抓取 javascript 链接)?

作为一个例子,我想提一下 github。因此,当您打开 https://github.com/pennersr/django-allauth时,里面的所有链接都已经加载了各自的链接,具体取决于当前的 URL。当您查看源代码时,您可以看到那里的链接。而您只是在视图源中看到一个 javascript 函数,链接是通过 javascript 创建的。我认为这些值也不会从后端传递。

有什么可能的解决方案来做到这一点?

4

1 回答 1

1

这是单页应用程序或大量使用 JavaScript 和 AJAX 的应用程序中的常见问题。

首先,您需要在 JavaScript 中为此操作创建唯一的 URL,以便爬虫至少可以“命中这些操作”。如果你在 JavaScript 中执行一个函数,但你的 URL 没有改变,谷歌将永远无法知道那里发生了什么事。通常 AJAX URL 是这样写的:

http://www.foo.com!#jsAction

Google 爬虫将能够爬取该 URL,但返回的页面可能是空白的,因为 JavaScript 代码负责呈现所有内容。

这就是为什么爬虫在调用你的服务器时会改变 _escaped_fragment_ 的 '!#'。因此,爬虫请求的前一个 URL 将是:

http://www.foo.com?_escaped_fragment_=jsAction

使用 URL 中的这个新关键字,我们可以在服务器中确定请求来自爬虫,这就是魔术开始的时间。使用像PhantomJS这样的无头浏览器,我们可以在服务器中执行 JavaScript 代码并将完全呈现的 HTML 返回到爬虫请求。这是 Google 在其指南中建议的方法之一。

所以基本上关键是确定你得到哪种类型的请求,并根据查询字符串是否包含_escaped_fragment_来执行不同的代码。

来自 Google 的此链接可能会帮助您指出正确的方向:https ://developers.google.com/webmasters/ajax-crawling/

希望能帮助到你!

于 2013-08-05T16:32:47.053 回答