8

我有一个用 C# 编写的 MVC3 应用程序,我想为其生成 rel=canonical 标签。在寻找自动实现这一目标的方法时,我遇到了这篇文章

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

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

我的问题是,这有什么好处?规范 URL 不应该明确指向我想要它指向的位置(即我的生产站点),而不是 URL 碰巧是什么?

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

使用上面帖子中的解决方案,如果有人要访问镜像站点,rel=canonical 链接标记将输出一个包含 MIRRORED URL 的规范 URL,这根本不是我想要的。<link rel="canonical" href="http://www.productionsite.com" />无论地址栏中的 URL是什么,它都应该是,对吧?我的意思是,这不是规范 URL 的重点还是我错过了什么?

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

4

3 回答 3

4

很好的问题,您对镜像站点仍然被标记为规范感到满意。实际上,您必须先解决几个问题,然后才能更难地敲击您的“链接汁”。

我怀疑主要原因是因为 MVC 在设计上是一个 URL 重写/路由系统。因此,根据最初请求的 URL 发生的消息,人们正试图将规范链接设置为“确定的”最终 URL 格式,然后重写。话虽如此,我认为您已经拨入了大多数人所拥有的疏忽——即“到达页面的 URL 怎么样,没有预料到并被重写为 URL 的有效、规范路径?” 这里的答案是在你发现它们时重写这些“错误请求”。例如:如果您重写了您的 ISP 的镜像域请求,那么当它到达加载的页面时,它现在是一个有效的 url;这是因为它已被您的重写规则“修复”。有道理?那么你' 您需要更新您的 MVC 路由以处理您的 ISP 创建的错误路由。注意:在构建规范链接值时,您必须确保不使用最初请求的 URL,而是使用最终重写的 URL。

继续阅读我的 WWW 与非 WWW 提示,以及您提到的有关不处理无效 url 的问题。

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

信不信由你,尽管存在争议,但许多人表示拥有 www.yourdomain.com/mypage.htm 和 yourdomain.com/mypage.htm 实际上会因“重复”内容而损害您的页面排名。我怀疑这就是人们在那里显示“相同域”的原因,因为它实际上是去掉了“WWW”的域。(我使用重写规则使 www 与 no-www 保持一致。)

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

于 2012-04-08T01:57:56.613 回答
1

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

没有任何!他们只会让事情变得更糟!他们只是被误导了

这件事有误导性的答案,这里还有堆栈溢出,已被接受投票

整个概念是为每个页面生成一个唯一的链接 ID,在规范标签中具有不同的内容。

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

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

协议字母大小写 不!

请参阅此处的问题和我的答案以获得更好的理解。

MVC 自动生成 rel="canonical"

于 2016-12-15T16:59:21.993 回答
0

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

于 2015-10-22T00:23:19.697 回答