hreflang 和 lang 属性的语义使用

Semantic use of hreflang and lang attribute

不是 SEO 问题。

我很好奇如何以语义正确的方式对所用语言进行标记 HTML。如果我的标记有误,请纠正我。

我的问题是:如果我已经在 link 标签中使用了 hreflang 属性,我还需要在 html 标签中使用 lang 属性吗?

这两个指令在语义上是否不同?我的意思是:两个示例中 link 标记中的自引用在语义上是否会被理解为指示文档的语言?

下面的代码示例可能会稍微澄清我的问题:

英文网页示例

http://example.com/en/

<!DOCTYPE html>
<html lang="en"> 
<head>
     <title>English webpage</title>
     <link rel="canonical" href="http://example.com/en">
     <link rel="alternate" href="http://example.com/en/" hreflang="en">
     <link rel="alternate" href="http://example.com/nl/" hreflang="nl">
     <link rel="alternate" href="http://example.com/en/" hreflang="x-default">
</head>
<body>
     <p>This is a webpage written in English. 
        This page is also available in Dutch. 
        The default language of this page is English. 
</body>
</html>

荷兰语网页示例

http://example.com/nl/

<!DOCTYPE html>
<html lang="nl"> 
<head>
     <title>Nederlandse webpagina</title> 
     <link rel="canonical" href="http://example.com/nl">
     <link rel="alternate" href="http://example.com/en/" hreflang="en">
     <link rel="alternate" href="http://example.com/nl/" hreflang="nl">
     <link rel="alternate" href="http://example.com/en/" hreflang="x-default">
</head>
<body>
     <p>Dit is een Nederlandstalige web pagina. 
        Deze pagina is beschikbaar in het Engels. 
        De standaardtaal van deze pagina is Engels.
</body>
</html>

您应该始终在 html 元素上提供 lang 属性。

与您的案例相关的两个原因:

  • HTML 规范描述了 how the language of a node gets determinedhreflang 属性在这里不起作用。

    如果您不在 html 元素上提供 lang此节点没有语言。

  • alternate+hreflang link 仅当 link-hreflang 不同于 html-lang 的值:

    If the alternate keyword is used with the hreflang attribute, and that attribute’s value differs from the root element’s language, it indicates that the referenced document is a translation.

    如果您不在 html 元素上提供 lang,则 alternate+hreflang link 不会考虑指向翻译。


即使用户代理通过考虑自引用¹ alternate+hreflang links 来推断文档的语言,在某些情况下也可能会失败:

  • 如果 HTML 文档在本地打开,它不再具有 HTTP URL,因此用户代理无法推断 alternate+ hreflang link 指的是这个文档。

  • 如果 HTML 文档通过不同的 URL 检索(例如,使用跟踪参数),alternate+hreflang link 不再引用当前的 URL,因此用户代理无法推断它也适用于此 URL。

(使用 canonical link,这两种情况都可以缓解,但这是用户代理必须支持的另一件事。并非所有人都支持。)


¹ 严格来说,自引用 alternate+hreflang hyperlink 不是语义的,因为 alternate 被定义为引用 "an alternate representation of the current document" ,但文档当然不是自身的 alternate 表示。但是,由于 Google 搜索记录了它的用途,现在看到此标记很常见。