【问题标题】:Can pages that make heavy use of AJAX also be search engine friendly?大量使用 AJAX 的页面也可以对搜索引擎友好吗?
【发布时间】:2010-12-03 19:59:06
【问题描述】:

我想我的意思是,如果我创建一个使用 AJAX 加载一些我也希望搜索引擎找到的内容的网站——如果我让页面工作 sans-javascript(比如,当 javascript 不存在时) ,链接转到site.com?c=somecontent 而不是使用$("#content").load("somecontent.html"); 调用函数),搜索引擎是否会跟随非javascript链接并能够很好地索引该站点?

我想如果支持 javascript 的浏览器跟随搜索引擎链接到 ?c=somecontent 链接的浏览器仍然可以正常使用该站点,那么这将起作用,对吧?

这是一项真正具有挑战性的工作,还是如果网站结构合理,是否可以相对轻松地完成?

【问题讨论】:

    标签: jquery ajax seo


    【解决方案1】:

    看看Single Page Interface Manifesto 最难的部分是向爬虫机器人提供“HTML 快照”。

    【讨论】:

      【解决方案2】:

      补充一点:如果您注意到 Facebook 的工作方式 - 如果启用 Javascript,AJAX 可以工作,如果 Javascript 被禁用(例如机器人),它仍然可以工作。

      在你的链接中做这样的事情(例如分页):

      <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 时页面仍然可以工作。

      【讨论】:

        【解决方案3】:

        除了之前的答案。

        您可以检查请求是否通过 AJAX 并根据它显示结果(即,如果是 AJAX,则为 JSON 数据,如果不是,则为完整的 html 页面)。在 PHP 检查脚本看起来像

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

        当然会有针对您在服务器端使用的技术(Ruby/Python/ASP)的解决方案。

        【讨论】:

          【解决方案4】:

          这可能会有问题,因为您最终会将页面的小片段放入索引中。

          如果你能侥幸成功,那么用普通的旧 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 解决方案(但在初始加载后速度更快,即慢一点)。

          现在,如果您有大量内容,您就必须想出更聪明的办法。但是,如果您的所有内容的重量都相对较小(不要忘记确保您的服务器对内容进行 gzip 编码),那么这种设置更可取。

          否则,如果您有数百千字节(或更多)的文本内容,您将不得不变得更狡猾。你最初的想法是正确的。

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

          通常会做你认为会做的事。当然,问题是“/some/page.html”最终会出现在搜索索引中。你可以尝试做一些棘手的服务器端事情(比如检查引用并重定向回“主”页面),但我不相信这不是潘多拉魔盒。

          希望有人会提出另一个解决此问题的答案。如果我想到了什么,我会编辑这个。

          【讨论】:

          • 我想如果我可以在不重新加载页面的情况下使用 javascript 更改地址栏中的 URL 会容易得多。这样,当用户最终访问/some/page 时,它就像平常一样,他们可以继续动态加载内容并看到相应的 URL 更改。也许我可以做到这一点?另一个答案指出我可以用 ?c=content 部分来做,但是有没有办法用整个 URL 来做?
          • 这当然会容易得多,但据我所知,它无法完成(我曾经研究过它)。我想你可能会变得棘手并在服务器端做一些事情,检查请求是否是 XHR,如果不是,则将内容片段包装在完整导航中,等等。
          • 您可以轻松修改哈希,例如 example.com/#page=music&order=popularitexample.com/#music/popularity 。看看 Gmail 是如何工作的。当您使用哈希 url 时,还有 JS 库支持浏览器历史导航。
          【解决方案5】:

          如果您的链接看起来像这样:

          <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 调用切换到哈希指示的页面。

          【讨论】:

          • 好吧,如果我使用 site.come/content/somecontent 样式呢?我可以用javascript更新吗?这样,每当我动态加载内容时,我都可以更新 URL 以反映所显示的内容,从而更容易获得指向该内容的永久链接?
          • 您无法更改地址栏中的位置。如果这样做,它将导致该位置加载。您只能更改哈希符号之后的地址部分。
          • 那么,像这些 cmets 那样坚持使用 AJAXing 一点点信息会更好吗?让它看起来像是您在没有重新加载页面的情况下发布了评论?对我来说,我认为漂亮的 URL 比动态加载内容页面更重......
          • 我同意拥有正确的 URL 比加载时间更重要。如果您要缓存页面引用的所有资产,那么加载新页面应该只比采用 AJAX 方法(仅重新加载页面的内容部分)慢一点。
          【解决方案6】:

          最好的方法是在没有任何 ajax 的情况下构建网站并应用 seo 实践。然后当非 ajax 版本工作时,将一个名为“动态链接”的类或其他东西添加到您想要成为 ajax 链接的链接中。并处理这些链接上的点击事件。所以当机器人爬取网站时,他们有一些可以依靠的东西。

          【讨论】:

          • 对,就像我在示例中所说的那样?如果没有 javascript,机器人会依靠正常的 URL 而不是动态加载内容?
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-03-10
          • 2012-06-18
          • 1970-01-01
          • 2014-11-09
          • 2011-08-31
          • 1970-01-01
          • 2017-04-13
          相关资源
          最近更新 更多