我想我的意思是,如果我创建一个使用AJAX加载我希望搜索引擎找到的内容的网站 - 如果我让页面工作sans-javascript(比如,当javascript不存在时) ,链接转到site.com?c=somecontent
而不是使用$("#content").load("somecontent.html");
调用函数),搜索引擎是否会遵循非JavaScript链接并能够很好地为网站编制索引?
我认为如果使用支持搜索引擎链接到?c=somecontent
链接的启用javascript的浏览器仍然可以正常使用该网站,那么这会有效吗?
这是一项非常具有挑战性的工作吗?如果网站结构合理,是否可以相对轻松地完成?
答案 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快照”。