2009-10-05 38 views
2

我想我的意思是,如果我製作了一個使用AJAX加載一些內容的網站,我還希望搜索引擎找到 - 如果我使頁面工作sans-javascript(例如,當javascript不存在時,一個鏈接去site.com?c=somecontent,而不是調用$("#content").load("somecontent.html");)功能,搜索引擎會遵循非JavaScript鏈接,並能夠索引該網站?可以大量使用AJAX的頁面也可以搜索引擎友好嗎?

我想這會工作,如果啓用JavaScript的瀏覽器誰跟隨搜索引擎鏈接到?c=somecontent鏈接仍然會正常使用該網站,對不對?

這是一個非常具有挑戰性的嘗試,或者如果網站結構正確,可以相對容易地完成這項工作嗎?

回答

2

如果您的鏈接看起來是這樣的:

<a href="http://site.com?c=somecontent" 
    onclick="Javascript:$('#content').load('somecontent.html'); return false;"> 
    Some link 
</a> 

它將優雅降級,而搜索引擎會很高興。

您確實遇到的一個問題是,當某個啓用了Javascript的用戶瀏覽您的網站時,地址欄中的位置不會更改。這可以通過讓onclick函數設置window.location.hash根據訪問者所在頁面更新url的哈希部分來克服。然後,在加載每個完整頁面時,腳本應檢查散列是否與當前頁面匹配,如果不匹配,則使用AJAX調用切換到由散列指示的頁面。

+0

好吧,如果我使用site.come/content/somecontent風格呢?我可以使用JavaScript更新嗎?這樣,無論何時我動態加載內容,我都可以更新URL以反映顯示的內容,因此獲取該內容的永久鏈接也更容易? – 2009-10-05 02:44:51

+0

您無法更改地址欄中的位置。如果你這樣做,它會導致該位置加載。您只能更改散列符號後的地址部分。 – Joel 2009-10-05 02:48:15

+0

那麼,堅持使用AJAX這些評論中的小部分信息會更好?看起來你發佈了評論而沒有重新加載頁面?對我來說,我認爲漂亮的URL比動態加載內容頁面要重得多...... – 2009-10-05 02:51:06

1

這樣做的最佳方式是構建沒有任何ajax的網站並應用seo實踐。那麼當非Ajax版本工作時,添加一個名爲「動態鏈接」或類的鏈接到你想成爲ajax鏈接的鏈接。並處理這些鏈接上的點擊事件。所以當機器人抓取該網站時,他們有一些東西可以回退。

+0

對,就像我在我的例子中所說的那樣?在沒有JavaScript的情況下,機器人將回歸正常的URL而不是動態加載內容? – 2009-10-05 02:42:01

2

只需添加:如果您已注意到Facebook的工作方式 - 如果啓用了Javascript,並且禁用Javascript(例如機器人),則AJAX仍然可以工作。

不要在你的鏈接是這樣的(例如,尋呼):

<a href="view.php?t=231&p=2" onclick="loadpage(2); return false;">2</a> 
<script type="text/javascript">/* <![CDATA[ */ 

function loadpage(p){ 
$("loader").load("view.php?c=pageonly&t=231&p="+p); 
} 

/* ]]> */</script> 

因此,關鍵是在某種程度上AJAX工作在現代瀏覽器的設計,然而,當你禁用了JavaScript的網頁仍然可以工作。

+0

這將不得不'返回false;'雖然正確? – 2009-10-05 02:41:16

+0

啊是的。 'return false;' – mauris 2009-10-06 08:01:03

1

這可能會產生問題,因爲您最終會將頁面的小碎片放入索引。

如果你可以避開它,用簡單的舊的DHTML「僞造」ajax會容易得多。

<div id="content-display"></div> 

<div id="content-1">Some content</div> 
<div id="content-2">Some other content</div> 

<style> 
#content-1 { display:none; } 
#content-2 { display:none; } 
</style> 

<script> 
displayContent = function(contentId){ 
    $('#content-display').update($(contentId).innerHTML); 
} 
</script> 

現在你已經得到了所有的內容可見,搜索引擎,都在相同的(正確)的URI,但對於啓用JavaScript的用戶,它的作用類似於AJAX的解決方案(但速度更快,初始後加載,這有點慢)。

現在,如果你有一個TON的內容,你必須考慮更聰明的東西。但是,如果你的所有內容相對較少(不要忘記確保你的服務器對內容進行了gzip編碼),那麼這種設置是可取的。

否則,如果您擁有數百千字節(或更多)的文本內容,則必須使用更復雜的技術。你最初的想法是非常正確的。

<a href="/some/page.html" onclick="$('#content').load('/some/page.html')"> 
LinkyText 
</a> 

通常會做你認爲它會。當然,問題在於'/some/page.html'最終會在搜索引擎中出現。你可以嘗試做一些棘手的服務器端的事情(比如檢查引用者並重定向回「主」頁面),但我不相信這不是潘多拉的盒子。

希望有人會與解決這個問題的另一個答案一起。如果我想到什麼,我會編輯這一個。

+0

我想如果我可以使用javascript在地址欄中更改網址而不重新加載頁面,這將會容易得多。這樣,當用戶在'/ some/page'結束時,它就像正常一樣,他們可以繼續動態加載內容並相應地改變URL。也許我能做到這一點?另一個答案指出,我可以用'?c = content'部分來做到這一點,但是有沒有辦法通過整個URL來完成? – 2009-10-05 02:47:55

+0

這當然會容易得多,但據我所知,這是不可能完成的(我曾經仔細研究過它)。我想你可能會變得棘手,並在服務器端做一些事情,檢查請求是否爲XHR,如果不是,請將內容片段包裝在完整導航中等。 – timdev 2009-10-05 02:59:52

+0

您可以輕鬆修改哈希,例如http://示例。 com /#page = music&order = popularit /或http://example.com/#music/popularity。只要看看Gmail的工作方式。當您使用哈希URL時,還有JS庫支持瀏覽器歷史導航。 – 2009-10-05 03:00:47

2

除了以前的答案。

您可以檢查是否通過AJAX請求顯示結果(即JSON數據如果AJAX,如果沒有完整的HTML頁面)。在PHP腳本檢查看起來你正在使用的服務器端(拼音/ Python/ASP)

function isAjax() { 
     return (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && 
     ($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest')); 
    } 

的技術肯定會有解決辦法。

相關問題