问题描述
我阅读以下内容,并尝试将此方案应用于运行 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 的发布链接 (即),它无法读取页面的内容,所以我猜到我的网站不是真的尊重自己的文档描述的方案,因为 Facebook 支持它 (如果你粘贴 http://twitter.com/#!/gablabelle 它会工作) 。所以,因为我使用 jQuery.address 插件来获取我的 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|rn|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 黑客,但是我需要适应于 WordPress 。问题是我不是程序员,我已经尽了最大的努力。
我的帖子是这样的格式:http://visualise.ca/#!/anne-au-cherry 和静态版本可以在 http://visualise.ca/anne-au-cherry(其中 anne-au-cherry 是帖子的一小部分,根据我们正在查看的页面而改变) 。
所以我的问题是有人可以确认我在正确的路径,如果可能的话也有助于创建 php 功能?
非常感谢您的时间和帮助!
最佳解决方案
具体 AVOID 使用”hashbang”(“!#”),以使 AJAX 供电的 WordPress 站点可以抓取。
您真的不想在 WordPress 网站上使用”hashbang” 方法。
“!#” 更像是一款不能为 AJAX 版本提供静态模拟的网站的黑客补丁。 Google 不推荐使用它,除非没有其他选择。
在 WordPress 中实现 hashbang 系统没有任何好处。用于 WordPress 的 front-end AJAX 解决方案应该可以解决现有的 URL 方案 (无哈希,无爆炸) 。
总结:WordPress 自然可以抓取; 根本不要用 hash-bangs 打破它。
次佳解决方案
我实际上是不使用像 WraithKenny 建议的 hashbang 。
为了设置 HTML5 状态管理中使用的网站的基本路径和 $ .address.value(value) 方法,使用 $ .address.state(value) 方法来使用 jQuery 地址插件,以便设置当前深层次的价值,我能够做到我所希望的。
帖子 (点击图片缩略图) 通过 AJAX 加载,网址同时更改,帖子自己使用,当然是相同的永久链接结构,因此它完全可以抓取。
唯一的问题是,对于旧的浏览器,我认为 (需要验证),仍然看到 hashbangs 。
既然我不是开发者,我花了很多时间来了解。 ://但我现在对结果很满意;-)
jQuery 地址:http://www.asual.com/jquery/address/
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。