問題描述

我閲讀以下內容,並嘗試將此方案應用於運行 WordPress 的網站:http://code.google.com/intl/fr-CA/web/ajaxcrawling/index.html

如果您訪問我的網站 http://www.visualise.ca/,您會看到它加載主頁中的帖子,並且當這個帖子加載時,該 URL 將成為 http://visualise.ca/#!/anne-au-cherryhttp://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 地址插件,以便設置當前深層次的價值,我能夠做到我所希望的。

http://visualise.ca/

帖子 (點擊圖片縮略圖) 通過 AJAX 加載,網址同時更改,帖子自己使用,當然是相同的永久鏈接結構,因此它完全可以抓取。

唯一的問題是,對於舊的瀏覽器,我認為 (需要驗證),仍然看到 hashbangs 。

既然我不是開發者,我花了很多時間來瞭解。 ://但我現在對結果很滿意;-)

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

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。