我们的一个网站有网址是这样的: example.oursite.com
。 我们决定用这样一个URL移动我们的网站www.oursite.com/example
。 要做到这一点,我们在重定向到我们的新网址与代码301我们的Apache服务器写了一个重写规则。
许多网站链接到我们的URL从example.oursite.com/#id=23
。 问题是,重定向擦除与IE的URL的散列部。 据我所知,散列部是从来没有发送到服务器。
我想实现重定向用JavaScript来保持的散列部,但搜索引擎将不会意识到我们的网址改变。 (无代码301返回)
我想搜索引擎来通知我们的新网址(301),因为我们需要将网页排名传递给我们的新网址。
有没有办法有一个301码重定向和保持的散列部( #id=23
的)的网址是什么?
Answer 1:
搜索引擎其实护理做有关哈希标签,他们经常使用他们在网页上标明具体含量。
为了这个问题,但是,锚位置不幸的是没有发送到服务器的HTTP请求的一部分。 如果您想将用户重定向,你需要做的Javascript在客户端。
好文章: http://web.archive.org/web/20090508005814/http://www.mikeduncan.com/named-anchors-are-not-sent/
Answer 2:
我相当肯定,一个URL的哈希/页锚/书签部分不被搜索引擎索引,因此对你的网页排名没有任何影响。 做一个谷歌搜索在“inurl:#”返回零个文件,使备份我的假设。 从外部网站的链接将不散列索引。
你是正确的,该散列部不会被发送到服务器,所以据我所知,还没有一个很好的办法能够创建一个重定向的URL与它的哈希值。
正因为如此,它是由浏览器重定向过程中正确管理哈希值。 火狐3.5似乎成功做到这一点。 如果追加一个散列具有已知重定向的URL,你会看到在地址栏到新的位置的URL的变化,但散列停留在那里成功。
编辑 :在回答下面的评论,如果没有在您需要的部分外部URL 井号 ,那么就完全可以重写URL。 Apache的重写规则会照顾它:
RewriteCond %{HTTP_HOST} !^exemple\.oursite\.com [NC]
RewriteCond %{HTTP_HOST} !^$
RewriteRule ^/(.*) http://www.oursite.com/exemple/$1 [L,R]
如果你不使用Apache,那么你就必须寻找到服务器的文档类似的东西。
Answer 3:
谷歌有一个基于散列的URL AJAX应用程序的特殊语法: http://code.google.com/web/ajaxcrawling/docs/getting-started.html
Answer 4:
你可以对捕获所有请求,并重定向到与正确的地址和恶意代码的新网站的旧地址创建一个页面。
我做了类似的东西,但它是在asp.net,我想这不是你使用的语言。 无论如何应该有办法在任何语言来做到这一点。
Answer 5:
当返回状态301,服务器应该返回一个“位置:”标头,指向新的位置。 在实践中,这种实现方式而异; 一些服务器提供完整的URL(netloc和路径),有的只是提供了新的路径和期望浏览器去寻找原始netloc这条道路。 这听起来像你的重写规则被剥离的路径。
一个简单的方法来看到返回Location头是什么,在Python外壳:
>>> import httplib
>>> conn = httplib.HTTPConnection('exemple.oursite.com')
>>> conn.request('HEAD', '/')
>>> res = conn.getresponse()
>>> print res.getheader('location')
我怕我不知道有足够的了解mod_rewrite的告诉你如何正确地做重写规则,但是这应该给你一个什么样的服务器实际上是告诉客户做的一个想法。
Answer 6:
眼看作为服务器永远不会看到#
(排除301个重定向)和谷歌已经过时了AJAX抓取机制 ,似乎是一个前端解决方案是唯一的出路!
我怎么做的:
(function() {
var redirects = [
['#!/about', '/about'],
['#!/contact', '/contact'],
['#!/page-x', '/pageX']
]
for (var i=0; i<redirects.length; i++) {
if (window.location.hash == redirects[i][0]) {
window.location.replace(redirects[i][1]);
}
}
})();
我假设,因为谷歌抓取工具确实执行JavaScript,新的页面将被正确索引。
我已经把它在一个<script>
标签直接在下方<title>
标记,以便得到任何其他JS / CSS之前执行。 请注意,此脚本应该只需要为你的索引文件。
Answer 7:
搜索机器人并不关心哈希标签。 如果你使用的是他们对某种闪光或AJAX调用,你有更严重的问题比你的301个重定向不起作用。 因为除非你有另一种形式的内容,搜索引擎不会索引你的网站,你肯定是尽可能SEO去受苦。
Answer 8:
我注册了我的帐户,所以我不能编辑。
zombat:对不起,我在我的评论犯了一个错误。 我们的视频链接是exemple.oursite.com/#video_id=233。 在这种情况下,在我的Apache重写规则不起作用。
尼克·贝拉尔迪:我们改变了链接的工作方式。 我们不使用#了,只是为了向后兼容
文章来源: Redirect 301 with hash part (anchor) #