规范链接是不是需要完整的域?

Posted

技术标签:

【中文标题】规范链接是不是需要完整的域?【英文标题】:Do canonical links require a full domain?规范链接是否需要完整的域? 【发布时间】:2012-01-18 01:41:32 【问题描述】:

我想向我的页面添加规范链接,但我需要指定域,还是需要一个相对 URL?

换句话说,就是:

<link rel="canonical" href="/item/1">

足够好,还是我需要使用:

<link rel="canonical" href="http://mydomain.com/item/1">

【问题讨论】:

【参考方案1】:

直接来自谷歌:

http://support.google.com/webmasters/bin/answer.py?hl=en&answer=139394

链接可以是相对链接还是绝对链接?rel="canonical" 可以与相对链接或绝对链接一起使用,但我们建议使用绝对链接以尽量减少潜在的混淆或困难。如果您的文档指定了 base 链接,则任何相对链接都将与该 base 链接相关。

【讨论】:

linkhref 由 Tim Berners Lee 在 html 的第一个规范中定义。谷歌并不比任何有意见的人更“直接”。 很公平,但由于大多数人,但因为谷歌的规范,我认为谷歌的答案对他们来说很重要。 是的。它们是一个很好的来源,但不是(请原谅双关语)一个规范的来源。 Google 已更改该页面,不再声明接受相对 URL(afaics)。相反,他们写“避免错误:使用绝对路径而不是带有rel="canonical" 链接元素的相对路径。”。这是否意味着(根)相对规范标签不再适用?在这种情况下,这样做的缺点和原因是什么?是否有任何“规范”来源表明(根)相关规范标签可以? @Qtax 我的猜测是该文本只是建议使用绝对 URL 来避免错误,而不是声明相对 URL 是错误的。如果在可以从多个域访问的任何页面上使用相对 URL,那么相对 URL 是错误的,因为您现在有多个指向同一个文档的规范 URL。【参考方案2】:

所有href 属性都是超文本引用——这就是它的含义。因此,它们始终是 URI 引用,而不是 URI,并且可以是相对的。

不过,在这种情况下,如果可以的话,放入完整的 URI 是有好处的,因为它可以在将来将其迁移到另一个域的任何东西中存活下来(假设您仍然希望列出的域是规范的域) ,甚至可以在一些更粗暴的自动抄袭中幸存下来:)

不过,如果您没有在其他域上积极使用非规范版本,那么这种好处是非常微不足道的,所以我不会在这方面花费太多精力。

【讨论】:

【参考方案3】:

Google 再次声明:

https://support.google.com/webmasters/answer/139066?hl=en

避免错误:使用绝对路径而不是带有rel="canonical" 链接元素的相对路径。

使用这个结构:https://www.example.com/dresses/green/greendresss.html

不是这个结构:/dresses/green/greendress.html)。

例如,这些是他们的网址:

http://example.com/wordpress/seo-plugin/

http://example.com/wordpress/seo/seo-plugin/

这就是 rel=canonical 的发明目的。尤其是在许多电子商务系统中,这种情况(不幸的是)经常发生,其中一个产品有几个不同的 URL,具体取决于你是如何到达那里的。您可以通过以下方法申请rel=canonical

您选择两个页面之一作为规范版本。它应该是您认为最重要的版本。如果您不在乎,请选择链接或访问者最多的那个。如果所有这些都相同:掷硬币。您需要选择。 将rel=canonical 链接从非规范页面添加到规范页面。因此,如果我们选择最短的 URL 作为我们的规范 URL,另一个 URL 将链接到最短的 URL,就像页面的 &lt;head&gt; 部分中的那样:

<link rel="canonical" href="http://example.com/wordpress/seo-plugin/">

就是这样。不多也不少。

【讨论】:

http://example.com/wordpress/seo-plugin//wordpress/seo-plugin/http://example.com 上没有区别。问题是:规范标签中是否需要完整的 URL,如果需要,为什么?像 /wordpress/seo-plugin/ 这样的根相对 URL 有什么问题?【参考方案4】:

canonical 没有什么特别之处。它是一种标准链接类型,用于提供链接的标准方式(例如,link 元素),因此您可以指定任何类型的 URL 引用(绝对、相对、protocol-relative,结合base 元素, empty, ...)。

RFC 6596(规范链接关系)explicitly says:

目标(规范)IRI MAY:

指定相对 IRI(请参阅 [RFC3986], Section 4.2)。

examples之一:

[…] 或作为相对 IRI:

<link rel="canonical" href="page.php?item=purse">

【讨论】:

【参考方案5】:

关于规范最佳实践的更新:rel="canonical" 具有跨域支持。谷歌来源:https://webmasters.googleblog.com/2009/12/handling-legitimate-cross-domain.html

此外,结构化数据的引入使得规范的使用更加严格,因为 Google 不会从非规范来源获取 JSON 标记(我碰巧犯了一个错误!)。

【讨论】:

这是错误的:“Google 不会从非规范来源获取 JSON 标记。”【参考方案6】:

如果您对该网站只有一个域,则可以使用绝对路径: &lt;link rel="canonical" href="/item/1"&gt;

【讨论】:

以上是关于规范链接是不是需要完整的域?的主要内容,如果未能解决你的问题,请参考以下文章

如何将不同的域或子域打开到新选项卡以及相同的域链接到相同的选项卡

www 的域 IP 地址和规范 URL 的非 www 的域 IP 地址

BLE 4.0 广告本地名称完整是不是有最小设备名称长度?

在哪里放置需要从数据库中获取数据的域逻辑

将我自己的域与 Firebase 动态链接一起使用

Python3 AWS Lambda-向需要VPN的域发出发布请求