可以大量使用AJAX的页面是否也适合搜索引擎?

时间:2009-10-05 02:28:15

标签: jquery ajax seo

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

我认为如果使用支持搜索引擎链接到?c=somecontent链接的启用javascript的浏览器仍然可以正常使用该网站,那么这会有效吗?

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

6 个答案:

答案 0 :(得分: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时页面仍然可以工作。

答案 1 :(得分: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调用切换到散列指示的页面。

答案 2 :(得分:2)

除了之前的答案。

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

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

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

答案 3 :(得分:1)

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

答案 4 :(得分: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'最终会出现在搜索标记中。您可以尝试做棘手的服务器端事务(比如检查引用并重定向回“主页”),但我不相信这不是潘多拉的盒子。

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

答案 5 :(得分:0)

看一下Single Page Interface Manifesto难以为抓取机器人提供“HTML快照”。