Jquery 大量使用AJAX的页面也能对搜索引擎友好吗?

Jquery 大量使用AJAX的页面也能对搜索引擎友好吗?,jquery,ajax,seo,Jquery,Ajax,Seo,我想我的意思是,如果我创建了一个使用AJAX加载一些我也希望搜索引擎能够找到的内容的网站——如果我让页面在没有javascript的情况下工作(比如,当javascript不存在时,一个链接会指向site.com?c=somecontent,而不是调用一个带有$(“#content”).load(“somecontent.html”))的函数,搜索引擎是否会遵循非javascript链接,并能够很好地索引站点 如果支持javascript的浏览器跟随搜索引擎链接到?c=somecontent链接

我想我的意思是,如果我创建了一个使用AJAX加载一些我也希望搜索引擎能够找到的内容的网站——如果我让页面在没有javascript的情况下工作(比如,当javascript不存在时,一个链接会指向
site.com?c=somecontent
,而不是调用一个带有
$(“#content”).load(“somecontent.html”)
)的函数,搜索引擎是否会遵循非javascript链接,并能够很好地索引站点

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


这真的是一项具有挑战性的工作吗?或者如果网站结构合理,这项工作可以相对容易地完成吗?

最好的方法是在不使用任何ajax的情况下构建网站并应用seo实践。然后,当非ajax版本工作时,向您希望成为ajax-link的链接添加一个名为“dynamiclink”的类或其他内容。并处理这些链接上的单击事件。因此,当机器人在网站上爬行时,他们有一些东西可以依靠。

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

在链接中执行类似操作(例如分页):


/*  */

因此,关键在于设计一种AJAX在现代浏览器中工作的方式,而当禁用Javascript时,页面仍然可以工作。

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

<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调用切换到散列所指示的页面。

这可能会有问题,因为最终会导致页面的小片段进入索引

如果你能侥幸逃脱,那么用普通的老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>

一些内容
其他一些内容
#内容-1{显示:无;}
#内容-2{显示:无;}
displayContent=函数(contentId){
$(“#内容显示”).update($(contentId.innerHTML);
}
现在,搜索引擎可以看到所有内容,所有内容都具有相同(且正确)的URI,但对于启用Javascript的用户来说,它的行为类似于AJAX解决方案(但在初始加载后速度更快,这稍微慢一点)

现在,如果你有大量的内容,你必须想出更聪明的方法。但是,如果您的所有内容都相对较轻(不要忘记确保您的服务器gzip对内容进行编码),则最好使用这种设置

否则,如果你有数百千字节(或更多)的文本内容,你就必须变得更加精巧。你最初的想法很正确

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

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


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

除了前面的答案

您可以检查请求是否通过AJAX,并根据请求显示结果(即,如果是AJAX,则显示JSON数据,如果不是,则显示整个html页面)。在PHP中,检查脚本如下所示

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

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

看看最难的部分是为爬虫机器人提供“HTML快照”。

对,就像我在示例中所说的那样?如果没有javascript,机器人会回到正常的URL而不是动态加载内容?好吧,如果我使用site.come/content/somecontent样式会怎么样?我可以用javascript更新吗?这样,每当我动态加载内容时,我都可以更新URL以反映显示的内容,从而更容易获得指向该内容的perma链接?您不能更改地址栏中的位置。如果这样做,将导致加载该位置。您只能更改地址中哈希符号后面的部分。因此,最好还是像这些注释那样保留少量信息?让它看起来像你已经发布了评论而没有重新加载页面?对我来说,我认为漂亮的URL比动态加载内容页面更重要……我同意拥有正确的URL比加载时间更重要。如果您正在缓存页面引用的所有资产,那么加载一个新页面应该只比采用AJAX方法(只重新加载页面的内容药水)稍微慢一点。我想如果我可以使用javascript更改地址栏中的URL而不重新加载页面,那会容易得多。这样,当一个用户在
/some/page
上结束时,就和正常情况一样,他们可以继续动态加载内容,并看到URL相应地发生变化。也许我能做到?另一个答案指出,我可以用
?c=content
部分来做,但是有没有办法用整个URL来做呢?当然会容易得多,但据我所知,这是做不到的(我曾经研究过)。我想你可能会变得很棘手,在服务器端做一些事情,检查请求是否是XHR,如果不是,则在完整导航中包装内容片段,等等。例如,你可以很容易地修改哈希,或者。看看Gmail的工作方式。当您使用散列URL时,还可以使用JS库来支持浏览器历史导航
  function isAjax() {
      return (isset($_SERVER['HTTP_X_REQUESTED_WITH']) &&
         ($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest'));
  }