【问题标题】:Crawlable javascript spa with pushstate SEO带有 pushstate SEO 的可抓取 javascript spa
【发布时间】:2014-01-05 03:23:13
【问题描述】:

我制作了一个单页应用程序。我已阅读以下文章create-crawlable-pushstate。 我在使用 hashbang 时遇到了问题。这对我来说似乎是一个解决方案。但我不太确定我是否能理解那里发生的事情。这是文章中的一个示例:

// 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 以显示链接已准备好。

  1. 在我的场景中,用户单击了 href。
  2. 路由器捕获哈希变化并调用函数。 (我可以在内容生成后将点击事件覆盖为pushstate。
  3. 内容将被加载和生成。 (时间流逝)

【问题讨论】:

    标签: javascript seo


    【解决方案1】:

    Google 不关心 JavaScript。它所看到的只是 URL。

    您的服务器仍然需要为每个给定的 URL 生成适当的页面。

    用JS:

    1. 客户端(浏览器、googlebot 等)请求http://example.com/whatever/whatever/whatever
    2. 服务器响应/whatever/whatever/whatever 的页面
    3. 客户端点击链接:
      • href="/something/something/something
      • Ajax</li> <li>preventDefault`
    4. 客户端使用 Ajax 加载内容
    5. 客户端将 URL 更改为 /something/something/something 而不重新加载整个页面

    没有 JS:

    1. 客户端(浏览器、googlebot 等)请求http://example.com/whatever/whatever/whatever
    2. 服务器响应/whatever/whatever/whatever 的页面
    3. 客户端点击链接:
      • href="/something/something/something
      • Ajax</li> <li>preventDefault`
    4. 客户端去/something/something/something(因为没有JS触发preventDefault

    然后,有人直接转到/something/something/something,同样适用。服务器直接传递/something/something/something 的内容。然后 JS 在单击链接时执行 Ajax 操作(如果 JS 可用)。

    【讨论】:

    • 在应用内容更改之前或之后 URL 是否更改通常无关紧要。我唯一能看到它是一个问题的是,如果 JS 需要很长时间才能完成更新,并且用户复制/粘贴新 URL 并认为它会转到旧页面。 Google 不会运行 JS(它将遵循常规链接),因此对 Google 来说一点也不重要。
    • JS生成的内容不会被索引。这就是为什么您使用 pushState(提供真实 URL)并将 (HTML) 内容放在可索引的那些 URL 上的原因。
    • hashbangs 和pushState 都要求您让服务器生成可索引的页面。不同之处在于,对于pushState,浏览器看到的URL 和被索引的URL 是相同的。对于pushState,浏览器在到达时加载的 URL 是用户实际想要查看的页面。使用 hashbangs,它是运行一堆 Ajax 并被替换的主页。从 hashbangs 转移到 pushState 消除了 Twitter 几年前因此而存在的一些可怕的性能问题。所以 hashbang 已经过时了。
    • Google 不会运行 JavaScript。它不会受到延迟,因为 JavaScript 需要时间来运行。它不会使用 Ajax 获取数据。它不会通过运行 JS 并查看 pushState 或 hashbang 修改的结果来获取要访问的 URL。它将请求/whatever/whatever/whatever,读取您的服务器为此提供的任何HTML,查看&lt;a href="/something/something/something"&gt;,请求/something/something/something,读取您的服务器为此提供的任何HTML,等等。
    猜你喜欢
    • 2013-09-03
    • 2011-09-05
    • 1970-01-01
    • 2012-12-12
    • 1970-01-01
    • 2013-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多