让我的AJAX支持的WordPress变得可爬行

时间:2011-08-12 作者:Gab

我阅读了以下内容,并尝试将此方案应用于我运行WordPress的网站:http://code.google.com/intl/fr-CA/web/ajaxcrawling/index.html

如果您访问我的网站http://www.visualise.ca/ 您将看到它在主页中加载帖子,url变为http://visualise.ca/#!/anne-au-cherry 加载此帖子时。相同内容的静态版本可用于爬虫http://visualise.ca/anne-au-cherry 但是如果访问者使用浏览器访问它,他将被重定向到http://visualise.ca/#!/anne-au-cherry (这是通过javascript完成的)。

为了给爬虫提供所需的?_escaped_fragment_= 我使用了我在网上发现的WordPress黑客:http://www.wordpress-fr.net/support/sujet-54810-add-action-parse-request 现在GoogleBot可以看到我的AJAX页面的内容。我以为一切都结束了。

但是当我粘贴一个帖子链接到Facebook(即)时,它无法读取页面的内容,所以我猜我的网站并没有真正尊重Google文档中描述的方案,因为Facebook支持它(如果你粘贴http://twitter.com/#!/gablabelle 它会起作用)。既然我在使用jQuery。获取我的hashbang(#!)的地址插件我访问了他们的网站并下载了他们的示例文件,以查看他们的文件和我的文件之间的差异,并意识到他们可能正在使用php函数创建所需的HTML快照:https://github.com/bartaz/jquery-address/blob/master/samples/crawling/index.php 因为这就是为什么,我想,Facebook不能读我的。

<?php

    error_reporting(E_ALL ^ (E_NOTICE | E_WARNING));

    $fragment = $_REQUEST[\'_escaped_fragment_\'];
    $file = \'data/\' . (isset($fragment) && $fragment != \'\' && $fragment != \'/\' ? preg_replace(\'/\\//\', \'\', $fragment) : \'home\') . \'.xml\';
    $re = \'/(^<[^>]*>)|(\\n|\\r\\n|\\t|\\s{2,4})*/\';

    $handle = fopen($file, \'r\');
    if ($handle != false) {
        $content = preg_replace($re, \'\', fread($handle, filesize($file)));
        fclose($handle);
    } else {
     $content = \'Page not found!\';
        header(php_sapi_name() == \'cgi\' ? \'Status: 404\' : \'HTTP/1.1 404\');
    }

?>
因此,我的猜测是,我可能会使用类似的php函数来服务HTML快照,而不是使用WordPress hack,但我需要将其适应WordPress。问题是我不是程序员,到目前为止我已经尽了最大努力。

我的帖子采用以下格式:http://visualise.ca/#!/anne-au-cherry 静态版本可在http://visualise.ca/anne-au-cherry (安妮·奥切里(AnneAuCherry)是这篇文章的主角,根据我们查看的页面的不同而有所变化)。

所以我的问题是,是否有人可以确认我走的是正确的道路,如果可能的话,还可以帮助创建php函数?

非常感谢您的时间和帮助!

3 个回复
最合适的回答,由SO网友:Gab 整理而成

实际上,我所做的是不要像幽灵肯尼建议的那样使用hashbang。

将jQuery地址插件与$一起使用。住址state(value)方法,用于设置HTML5状态管理中使用的网站的基本路径和$。住址value(value)方法为了设置当前的深度链接值,我可以随心所欲。

http://visualise.ca/

帖子(点击图像缩略图)是通过AJAX加载的,同时URL也会发生变化,帖子本身使用相同的永久链接结构,因此完全可以爬行。

唯一的问题是,我认为(需要验证)仍然可以看到hashbang的旧浏览器。

因为我不是开发人员,所以我花了很多时间来理解。:/但我现在对结果很满意;-)

jQuery地址:http://www.asual.com/jquery/address/

SO网友:WraithKenny

明确地AVOID 使用“hashbang”(“!#”)使AJAX支持的WordPress站点可爬行。

你真的不想在WordPress网站上使用“hashbang”方法。

“!#”更像是针对cannot 为其AJAX版本提供静态模拟。谷歌一般不推荐使用它,除非没有其他选择。

在WordPress中实现hashbang系统没有任何好处。WordPress的前端AJAX解决方案应该围绕现有的url方案工作(没有哈希,没有爆炸)。

Summary: WordPress is naturally crawlable; simply don\'t break it using hash-bangs.

SO网友:brandwaffle

如果您特别提到Facebook没有正确显示页面的元数据信息,那么您应该查看WordPress的OpenGraph插件,因为它会添加相应的og:属性元数据。http://wordpress.org/extend/plugins/opengraph/

此外,您可以在标题中添加这样的链接

<link rel="canonical" href="link_back_to_real_post_url">
看看这有什么用。

我不得不问,你为什么要这样做?推特因为这种URL结构而备受抨击,正是因为这是一种爬行的痛苦。不是说你不应该这样做,而是很好奇原因是什么:)

结束

相关推荐

使用带有分页和自定义子查询的AJAX

我有一个页面,它使用三个查询来检索各种内容。其中一个查询获取与页面主题相关的帖子。由于这些帖子可以是各种各样的,并通过各种方法(各种魔术字段定义的值、它们的类别等)进行关联,因此我使用自定义查询来获取它们(在这里我构建了一些参数并将它们传递给WP\\u query(),如下所示:$collected_child_posts = new WP_Query($args);目前我一次返回5个结果(在我的参数中\'posts_per_page\' => 5) 我想使用ajax对这些结果进行分页,这样当您单击