使我的AJAX驱动的WordPress可抓取


9

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

如果您访问我的网站http://www.visualise.ca/,您会看到它在主页上加载了帖子,并且当此网址变为http://visualise.ca/#!/anne-au-cherry帖子已加载。搜寻器可通过http://visualise.ca/anne-au-cherry获得相同内容的静态版本,但是如果使用浏览器的访问者访问了该内容,他将被重定向到http://visualise.ca/#! / anne-au-cherry(使用javascript完成)。

为了提供所需的?_escaped_fragment_=搜寻器,我使用了网上找到的WordPress WordPress:http : //www.wordpress-fr.net/support/sujet-54810-add-action-parse-request,现在GoogleBot可以查看我的AJAX驱动页面的内容。我以为一切都完成了。

但是,当我将帖子链接粘贴到Facebook(即)时,它无法读取页面的内容,因此我猜测我的网站并不真正尊重Google文档中描述的方案,因为Facebook支持它(如果您粘贴http, ://twitter.com/#!/ gablabelle即可使用)。因此,由于我使用jQuery.address插件获取哈希值(#!),因此我去了他们的网站并下载了他们的示例文件,以查看他们的文件和我的文件之间的区别,并意识到他们可能在使用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(其中anne-au-cherry是帖子的内容,并且会根据我们正在查看的页面而变化)。

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

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


5
您是否想过生成站点地图?例如,Yoast WordPress SEO会自动为您的内容生成一个站点地图,并将其提交给Bing,Google和Yahoo ...

为站点地图提示+1。不过,对于传递给Google展示该网站的url参数,我仍然感到困惑。您是否可以粘贴同时包含a)页面内容和b)没有JavaScript运行的网址?如果不存在,那么Google或Facebook就不会爬行。
brandwaffle 2011年

Answers:


4

特别是使用“ hashbang”(“!#”)避免,以使AJAX驱动的WordPress网站可爬网。

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

“!#”更像是针对无法为其AJAX版本提供静态模拟的网站的修补程序。除非没有其他选择,否则Google不建议一般使用它。

没有好处,以在WordPress实现hashbang系统。WordPress的前端AJAX解决方案应围绕现有的url方案(不散列,不爆炸)解决。

简介:WordPress自然是可爬网的;只是不要使用哈希爆炸来破坏它。


1

如果您是专门指Facebook无法正确显示页面的元信息,则应查看WordPress的OpenGraph插件,因为它将添加适当的og:attribute元数据。http://wordpress.org/extend/plugins/opengraph/

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

<link rel="canonical" href="link_back_to_real_post_url">

看看是否有任何作用。

我不得不问,为什么要这样做?Twitter之所以受到这种URL结构的攻击,恰恰是因为它很难抓取。并不是说您不应该这样做,而是对原因很好奇:)


1

我实际上所做的是不使用WraithKenny建议的hashbang。

结合使用jQuery地址插件和$ .address.state(value)方法来设置在HTML5状态管理中使用的网站的基本路径,以及$ .address.value(value)方法来设置当前的深层的联系价值使我能够做到自己想要的。

http://visualise.ca/

帖子(单击图片缩略图)通过AJAX加载,并且URL同时更改,这些帖子使用相同的永久链接结构独立存在,因此完全可抓取。

我认为唯一的问题将是较旧的浏览器,我认为(需要验证)它们仍然会看到哈希爆炸。

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

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


1
看一下jQuery pjax插件。github.com/defunkt/jquery-pjax这非常相似,但是会为您加载内容,等等。这是我为“二十一十一孩子”主题所做
chrisguitarguy
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.