【问题标题】:How does creating a canonical URL based on the current URL do any good?根据当前 URL 创建规范 URL 有什么好处?
【发布时间】:2012-04-07 16:58:27
【问题描述】:

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

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

之类的标签

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

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

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

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

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

【问题讨论】:

  • 使用当前 URL 确实没有多大作用。更典型的用法是当稍微不同的 url(权限或路径)给出相同的页面时,all 的规范应该是 single 首选/权威 url

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


【解决方案1】:

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

我怀疑主要原因是因为 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 一致在那里,或者不存在。 (有人争论哪个更好,我认为这并不重要,只要你保持一致。)

【讨论】:

  • 斯科特,我想到了另一个想法。我应该具体说明重写规则在很大程度上是合适的,但这可能最好作为永久重定向(处理无效域)和重写(处理 WWW 与非 WWW 等)的组合来处理以达到您以编程方式将其设置为正确、规范的最终“完美 URL”。搜索引擎不会因为重定向而惩罚您,尤其是当它最终到达一个最终提供一个有效规范 URL 的页面时。
【解决方案2】:

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

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

这件事有误导性的答案,这里还有堆栈溢出问题,已经接受赞成!!

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

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

Controller NameAction NameLanguage。这 3 个变体将提供不同的内容。

协议字母大小写 不要!

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

MVC Generating rel="canonical" automatically

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-13
      • 2013-08-08
      • 2013-11-21
      相关资源
      最近更新 更多