0
我製作單頁應用程序。我讀過以下文章create-crawlable-pushstate。 我只是用hashbang運行問題。這對我來說似乎是一種解決方案。但我不太確定,如果我用戶在那裏發生了什麼。這裏有一篇文章的例子:可壓縮javascript spa與pushstate SEO
// We're using jQuery functions to make our lives loads easier
$('nav a').click(function(e) {
url = $(this).attr("href");
//This function would get content from the server and insert it into the id="content" element
$.getJSON("content.php", {contentid : url},function (data) {
$("#content").html(data);
});
//This is where we update the address bar with the 'url' parameter
window.history.pushState('object', 'New Title', url);
//This stops the browser from actually following the link
e.preventDefault();
}
這很棒,但谷歌如何知道內容是可用的。 getJson
函數是異步的,所以在加載內容之前將會推送該狀態。我的想法是,我加載內容後調用pushstate來顯示鏈接已準備就緒。
- 在我的方案中,用戶點擊href。
- 路由器捕獲哈希變化並調用一個函數。 (生成的內容後,我可以覆蓋點擊事件pushState的。
- 內容將被加載並生成。(時間通)
在應用內容更改之前或之後,URL通常無關緊要。我只能看到它是一個問題,如果JS需要很長時間才能完成更新並且用戶複製/粘貼新的URL,則認爲它會轉到舊頁面。谷歌不會運行JS(它會遵循常規鏈接),所以Google對它根本沒有任何影響。 – Quentin
由JS生成的內容不會被編入索引。這就是爲什麼您使用'pushState'(提供真實的URL)並將這些內容放在這些可索引的URL上。 – Quentin
hashbangs和'pushState'都要求你讓服務器生成可索引的頁面。區別在於,使用'pushState',瀏覽器看到的URL和獲取索引的URL是相同的。使用'pushState'時,瀏覽器在到達時加載的URL是用戶實際想要查看的頁面。隨着hashbangs,它是主頁,然後運行一堆Ajax並被取代。因此,從hashbang到'pushState'消除了Twitter幾年前出現的一些可怕的性能問題。所以hashbangs *已經過時了。 – Quentin