如何根据当前URL创建规范URL有什么用呢?

时间:2012-04-07 16:58:28

标签: c# asp.net-mvc canonical-link

我有一个用C#编写的MVC3应用程序,我想生成rel = canonical标签。在搜索SO以便自动实现此目的时,我遇到了this post

我在我的开发环境中实现了它,它按预期工作并生成标签,如

<link href="http://localhost/" rel="canonical" />

我的问题是,这有什么用呢?规范URL不应该明确指向我想要的地方(即我的生产网站),而不是指向URL恰好是什么?

我提出这个问题的原因是因为我的托管服务提供商(现在仍然无名)也会生成另一个指向我网站的网址(相同的IP地址只是一个不同的主机名,我不知道为什么,他们声称这是为了反向DNS目的 - 这是另一个主题)。但是,我已经开始在此镜像网址下看到我的网页显示在Google搜索结果中。对SEO不好,因为它是“重复内容”。现在,我通过简单地配置我的IIS站点以仅响应对我站点的域的请求来修复它,但是,现在似乎是查看规范URL在此处提供的解决方案类型的好时机。

使用上面帖子中的解决方案,如果有人要去镜像站点,那么rel = canonical link标签会输出一个包含MIRRORED URL的规范URL,这根本不是我想要的。无论地址栏中的URL如何,它始终应为<link rel="canonical" href="http://www.productionsite.com" />,对吗?我的意思是,这不是规范网址的重点,还是我错过了什么?

假设我是正确的,是否有一种可接受的通用方法来为MVC3应用生成规范URL?我显然可以为每个页面单独定义它们,或者我可以简单地替换我用硬编码域名链接的解决方案中的rawUrl.Host参数,我只是想知道为什么我看到这么多人生成规范的例子这种方式的URL似乎不符合目的(至少在我的例子中)。他们试图通过将当前URL插入rel = canonical链接元素来解决什么问题?

3 个答案:

答案 0 :(得分:3)

很好的问题,而且您仍然认为镜像网站仍然被标记为规范。事实上,你必须解决一些问题,然后才能更加努力地扼杀你的“链接汁”。

我怀疑主要原因是因为MVC在设计上是一个URL重写/路由系统。因此,根据最初请求的URL发生的按摩,人们正在尝试将规范链接设置为“已确定”最终URL格式,重写后。也就是说,我认为你已经在大多数人的监督下进行了调查 - 这是“到达页面的URL是什么,没有预料到并且REWRITTEN成为URL的有效,规范路径?”这里的答案是在发现它们时重写这些“错误请求”。例如:如果您重写了ISP的镜像域请求,那么当它到达加载的页面时,它现在是一个有效的URL;这是因为它被重写规则“修复”了。合理?因此,您需要更新MVC路由以处理ISP创建的错误路由。注意:在构建规范链接值时,您必须确保不使用最初请求的URL,而是最终重写的URL。

继续关注我的WWW与非WWW提示,以及您提到的有关未处理无效网址的问题。

人们也这样做是因为您的网站已经“镜像”了人们总是忘记的另一个域名。 “WWW”子域。

信不信由你,尽管有争议,但很多人都说www.yourdomain.com/mypage.htm和yourdomain.com/mypage.htm实际上是因为“重复”内容而损害了您的网页排名。我怀疑这就是为什么人们在那里展示“相同的域名”,因为它实际上是剥夺了“WWW”的域名。 (我使用重写规则使www与no-www保持一致。)

另外,请注意“将我的IIS网站配置为仅响应对我网站域名的请求”,因为如果Google仍然在那里看到链接并认为它们是您网站的一部分,那么实际上可能会因为网页失败而惩罚您加载(即404s)我建议有一个重写规则将它们发送到你的“真实”域或者至少将规范链接设置为只使用你的“真实”域名,WWW一直在那里,或不存在。 (有人认为哪个更好,只要你保持一致,我认为这不重要。)

答案 1 :(得分:1)

  

他们试图通过将当前网址插入rel = canonical链接元素来解决什么问题?

无!他们只会让事情变得更糟!他们刚被误导了

这个问题有误导性的答案,这里也有关于堆栈溢出的已接受已投票 !!

整个概念是为规范标记中具有不同内容的每个网页生成唯一链接ID

因此,为您的规范标签生成唯一链接的好方法是基于。

控制器名称操作名称语言。这3种变体将提供不同的内容。

协议信函大写 不要

请在此处查看问题和答案,以便更好地理解。

MVC Generating rel="canonical" automatically

答案 2 :(得分:0)

根据当前网址创建规范网址没有任何好处。您应该根据数据库信息之类的静态内容创建规范URL。例如,如果您的网址包含,请说出书的标题。您应该从数据库中提取该书名,并从该页面创建规范URL,而不是当前页面的URL。这样,如果缺少部分网址并且页面仍然显示,则规范网址将始终相同。