我想你有什麼問題,所以我會試着解釋這裏發生了什麼,包括背景和選擇。因爲這確實是我們大多數人不時偶然發現的(或至少類似的)非常重要的話題。
使用AJAX或者更確切地說是異步增量頁面更新(因爲大多數頁面實際上不使用XML而是使用JSON),豐富了網頁並提供了很好的用戶體驗。
但它也有代價。
主要問題是客戶端根本不支持xmlhttpget對象或JavaScript。 一開始你必須提供向後兼容性。 這通常是通過提供鏈接並捕獲onclick事件並啓動AJAX調用來完成的,而不是重新加載頁面(如果客戶端支持它)。
今天幾乎每個客戶端都支持必要的功能。
所以今天的問題是搜索引擎。因爲他們沒有。那麼這不完全是真的,因爲他們部分地(尤其是谷歌),但爲了其他目的。 谷歌評估某些JavaScript代碼,以防止黑帽SEO(例如,一個鏈接指向某處,但JavaScript會打開一些完全不同的網頁......或者是客戶端不可見的HTML關鍵字代碼,因爲它們被JavaScript刪除或其他方式) 。
但保持簡單,最好考慮一個非CSS或JS支持的非常基本的瀏覽器的搜索引擎爬行程序(對於CSS,其派對由於特殊原因進行了解析)。
因此,如果您的網站上有「AJAX鏈接」,並且Webcrawler不支持使用JavaScript跟蹤它們,則它們只是不會被抓取。或者他們呢? 那麼答案是JavaScript鏈接(就像document.location什麼的)得到遵循。谷歌通常足夠聰明地猜測目標。 但阿賈克斯調用不是。因爲他們返回部分內容,並且由於上下文未知,並且唯一的URI不代表內容的位置,所以它不能構建有意義的整個頁面。
所以基本上有3個策略來解決這個問題。
- 對正常href屬性作爲後備的鏈接onclick事件通過你的站點地圖(IMO是最好的選擇,因爲它解決了客戶,以及搜索引擎的問題)
- 提交內容的網站,使他們獲得索引,而是徹底離開你的網站的鏈接(通常是頁提供了一個固定鏈接到這個網址,以便外部頁面鏈接他們的網頁級別)
- AJAX抓取方案
的想法是讓你的JavaScript xmlhttpget請求糾結與通信荷蘭國際集團,看起來像這樣的href屬性: www.example.com/ajax.php#!key=value
這樣的鏈接看起來像:
<a href="http://www.example.com/ajax.php#!page=imprint" onclick="handleajax()">go to my imprint</a>
功能handleajax
可以評估document.location
變量火增量異步頁更新。它也有可能通過一個ID或網址或其他。
履帶但承認AJAX檢索機制格式,並自動獲取http://www.example.com/ajax.php.php?%23!page=imprint
而不是http://www.example.com/ajax.php#!page=imprint
所以你的查詢字符串,然後contanis的HTML片段,您可以從中分辨出哪部分內容進行了更新。 所以你只需要確保http://www.example.com/ajax.php.php?%23!page=imprint返回一個完整的網站,看起來像網站在xmlhttpget更新後應該看到用戶。
一個非常優雅的解決方案也是將一個對象本身傳遞給處理函數,該函數然後獲取相同的URL,因爲爬蟲將使用ajax獲取但使用其他參數。然後,您的服務器端腳本將決定是發送整個頁面還是僅發送部分內容。
這確實是一個非常有創意的辦法,這纔是我的個人公關/ CON分析:
親:
- 局部更新頁面獲得一個唯一的標識符,在這一點上,他們完全有資格資源的語義網絡
- 部分更新網站收到可以通過搜索引擎
CON呈現一個唯一的標識符:
- 它沒有JavaScript
- 它提供了黑帽SEO的機會,搜索引擎只是一個備用的解決方案,而不是客戶。所以谷歌肯定不會完全採用它,或者用這種技術對頁面進行排名,並且沒有對內容進行適當的驗證。
結論:
與後備遺產工作的href屬性只是平常的鏈接,而是一個onclick處理程序是一個更好的辦法,因爲他們爲舊瀏覽器提供的功能。
ajax抓取方案的主要優點是部分更新的網站獲得唯一的URI,並且您不必創建重複的內容,以某種方式作爲可索引和可鏈接的對象。
你可能會認爲ajax抓取方案的實現更加一致並且更容易實現。我認爲這是你的應用程序設計的問題。
OHHH!現在很清楚它是如何工作的! :)非常感謝的人!我不明白爬蟲是如何獲得頁面的鏈接的。現在我明白了,我把它們放在href鏈接上。是的,它應該起作用!這是一個偉大的「escamotage」!但我認爲它是一個很好的技巧,而不是Web 2.0的SEO的真正解決方案。 :)但確定,它似乎有效!只有最後一件事:只有瀏覽器在href之前評估onclick事件(但我認爲所有事情都這樣做),這纔有效。謝謝喬,你真的幫我:) – markzzz 2010-10-11 15:06:28
和對不起我的廢話英語:) – markzzz 2010-10-11 15:07:09