2014-08-27 63 views
1

因此,我使用AJAX来调用服务器文件,该文件使用WordPress填充内容并返回pages。我用哪个填充字段。现在我感到困惑的是,如何创建快照,以及我需要做什么才能让Google知道我正在创建一个除了#!还为什么要这样做? escaped_fragments有点不清楚,希望我能得到更详细的解释。有没有人有任何教程,引导你通过这个过程类似于我正在做的?检索Google的快照HTML

David

回答

0

Google的抓取工具通常不会运行您的JavaScript。他们打你的网页,刮你的HTML,然后继续前进。这比加载页面及其所有资源,运行JavaScript,猜测所有内容何时完成加载,然后从DOM中提取数据都要高效得多。

如果您的网站使用AJAX来填充包含内容的网页,这对Google和其他人来说是个问题。您的网页实际上是空的...在其HTML状态下没有任何内容...。它需要您的JavaScript来填写它。由于抓取工具不运行JavaScript,因此您的页面对抓取工具来说并不是那么有用。

现在,有很多网站将基于Web的应用程序和内容驱动的网站混合在一起。这些网站(如您的)需要运行客户端代码才能获取内容。谷歌没有资源在他们遇到的每个网站上都这样做,但他们确实提供了一个选项。这是info you found about escaped anchor fragments

谷歌给了你机会去完成为他们完成完整的DOM的工作。他们已经把CPU和内存负担运行在你的JavaScript上。您可以向谷歌表示,使用#!的链接可以鼓励这一点。谷歌看到这一点,并知道他们然后可以请求相同的页面,但将#!(不发送到服务器)后的所有内容转换为?_escaped_fragment_=并向您的服务器发出请求。此时,您的服务器应该在JavaScript运行之后生成完整完成的DOM的快照。

好消息是,这几天你不需要破解大量的代码就可以做到。我已经使用PhantomJS编写了一个服务器来执行此操作。 (我试图获得开放源代码的权限,但是它在法律边界,对不起!)基本上,PhantomJS是一个完整的webkit web浏览器,但它运行时没有GUI。你可以在use PhantomJS to load your site,运行所有的JavaScript,然后当它准备好将HTML拖回页面并发送版本到Google。这并不要求你做任何特别的事情,除了在你的快照服务器上修改你的路由到点数为_escaped_fragment_的请求。

您可以在约20行代码中完成此操作。 PhantomJS甚至内置了迷你网页服务器,但他们建议不要将其用于生产代码。

我希望这有助于澄清一些混乱!

+0

布拉德这有帮助。您是否有任何有用的资源来创建代码以确保Google运行并返回HTML快照?另外你在这种情况下推荐我做什么?是否值得搞清楚如何使这个谷歌搜索引擎兼容或更好地转向更传统的方式?我真的不想这样做,因为我知道我有这方面的技能和知识。这只是一个理解我需要做什么才能使这项工作与谷歌。对我的具体情况有点不清楚。另外要注意我正在使用AJAX调用服务器,而不是使用 – 2014-08-28 01:22:04

+0

链接来更改URL,我刚刚意识到这可能是一个问题。我的意思是。当他们点击事件启动时,它不是'a href',它是一个'div',它包含一个页面代码以及我的JQuery函数通过'AJAX'发送并发送的div。这给我带来了另一个问题,我很可能必须确保我使用'#!'和链接,并且我不能依靠'window.location.hash ='#!key_page ='+ key_page +''; “使它与谷歌工作? – 2014-08-28 01:23:52

+0

Google不会运行并返回任何内容。服务器负责运行您的页面并将DOM快照返回给Google。如果你使用'#!'链接,这表明它们应该使用'_escaped_fragment_'。从那里,你只需要在你的服务器上设置路由来寻找'_escaped_fragment_'来利用你的服务器。我的建议是使用最适合您网站的内容。如果AJAX是您的功能的核心,请使用shapshot服务器。如果你可以用传统的方式修改你的页面,那将是最好的。 – Brad 2014-08-28 01:24:37