搜索引擎被禁止索引非规范页面非规范

:warning: 重要

经过进一步调查,我们决定保持非规范索引启用状态,更多详情请参阅:Search engines now blocked from indexing non-canonical pages - #30 by sam

原始公告

Discourse 现在将在请求的页面不是资源的规范页面时,回复一个 X-Robots-Tag: noindex 标头。

虽然 Discourse 对主题列表和主题都使用了自动滚动设计,但这并不是我们展示给搜索引擎爬虫(如 GoogleBot)的内容。搜索引擎会看到分页的主题,每页包含 20 篇帖子。但是,由于用户可以在自己的帖子中链接到特定帖子,并使用 /t/title/topic_id/post_id URL 格式进行链接,因此这些链接会被爬虫抓取,并在您的网站搜索结果中添加重复内容,浪费您域名宝贵且有限的爬虫预算。

为了缓解这个问题,我们的社区用户建议为帖子特定 URL 等 URL 添加 X-Robots-Tag: noindex,我们已将其扩展到 Discourse 中的所有非规范 URL。这在 3 个月前作为隐藏的网站设置发布,默认禁用,在此期间我们尝试在社区网站和 meta.discourse.org 上启用此标头。

由于到目前为止此期间的结果看起来不错,我们已将此设置更改为默认生效。

如果您出于某种原因不希望在您的实例上出现此行为,仍然可以通过在服务器上运行 docker exec -i app rails runner \"SiteSetting.allow_indexing_non_canonical_urls = true\" 来启用对非规范页面的索引。

不要期望在短期内看到爬虫和搜索结果发生剧烈变化,但在接下来的几个月里,您应该会看到帖子特定页面的爬虫和搜索结果减少,这将导致更多的爬虫时间花费在您网站的新主题和因域名爬虫预算限制而尚未被索引的内容上。

32 个赞

TL;DR:不要屏蔽非规范页面 - 只需通过 \u003clink rel=\"canonical\" … \u003e 指向正确的网址 - 这就是它的用途。


此功能可能会损害长期的 SEO 链接建设:
现在,所有指向主题内答案的深度链接都在 noindex 页面上!谷歌喜欢这样吗?

实际上,一个始终指向主题网址的 canonical 标签 - 即使是深度链接到答案的页面 - 也应该能完美地完成工作 - 而无需添加 X-Robots-Tag: noindex
在首次抓取深度链接答案页面时,谷歌会识别出页面网址(主题内的答案)不符合规范网址,然后决定只抓取规范网址(主题)。


我们可以为所有执行此主题-答案深度链接的链接添加 \u003ca rel=\"nofollow\" …\u003e 吗? 编辑:不,请参阅 Search engines now blocked from indexing non-canonical pages - #9 by j127
这样,我们或许可以为搜索引擎节省更多宝贵的、有限的抓取预算:
搜索引擎首先不会提取链接,也不会调用该网址。调用该网址会返回一个带有 X-Robots-Tag: noindex http 标头的响应,导致该网址被添加到搜索引擎内部的“noindex”列表中,从而“丢弃”该响应。

通过为 RSS feed 网址添加 nofollow,可以进一步节省抓取预算:

5 个赞

我完全同意 @rrit 的建议。

最好将主题内的子页面/帖子指向其原始规范,而不是阻止它们。

与其添加 noindex,我们能否在主题下的每个回复中添加 nofollow 标签?

1 个赞

这正是它目前的工作方式,所以我不太明白。

所以你的建议是我们需要在这里更新 URL

使用带有页码和帖子锚点的规范 URL?

这些已经通过 robots.txt 阻止了,但这是一个好主意!

听起来也是个好主意!

4 个赞

你说得对,抱歉。我有时会陷入自己的思绪中。:slight_smile:

快速问一下,我假设只要我们将 Discourse 更新到 v2.9,此功能就可以默认使用了?

4 个赞

我认为该功能不应默认启用。从交通角度来看,这很危险,即使它只在很短的时间内启用,因此任何现在更新的人都可能遇到不受欢迎的意外。

canonical 标签是 Google 推荐处理该问题的方法,而且它似乎已经奏效。对 canonical 标签进行奇怪的操作可能会导致 Google 出现奇怪的问题,而 noindex 错误可能很难恢复。

2 个赞

我同意你帖子的第一部分,但我不认为内部 nofollow 是理想的。内部链接有助于告诉搜索引擎哪些页面很重要。Google 不会跟踪它看到的每一个链接,因为它知道它已经见过它们了。如果它们看到一个像 example.com/t/1234/5 这样的网址,但已经抓取过它并且知道它的 canonical 网址是 example.com/t/1234,它们可能不会浪费计算资源多次访问非规范版本。

3 个赞

移除外部网站链接的“noindex”

抱歉,“答案”的意思是主题中的“帖子”:
现在,从外部域到帖子的所有深度链接(例如 forum.example.com/t/example-topic/5/11)都带有 http 标头 X-Robots-Tag: noindex!我建议再次移除此 http 标头。

我建议对于 <link rel="canonical" … > 永远不要使用带有帖子锚点的 URL(…/t/example-topic/1234/5 中的最后一个数字)。规范 URL 应始终指向主题 URL 本身(…/t/example-topic/1234)。我认为它已经这样实现了。


如果目标 URL 被 <link rel="canonical" … > “重定向”,则为搜索引擎重写链接

非常好的观点,最好不要在这里添加 rel="nofollow"

Discourse 有一个特殊的爬虫视图。针对爬虫视图的新建议
将所有指向帖子 URL(example.com/t/1234/5)的内部链接转换为指向相应的主题 URLexample.com/t/1234)。
意图:当这些额外的 URL 无论如何都被 <link rel="canonical" … > “重定向”时,不要向搜索引擎宣布额外的 URL。

找到此类帖子链接的位置:

  • 用户内容中手动添加的链接
  • 自动生成的链接,位于:
    • 引用
    • 主题的第一个帖子:“来自其他主题的入站跟踪链接”
    • 主题的第一个帖子:“精选答案”
    • 主题的第一个帖子 - 主题地图打开:“主题链接”/“喜欢的链接”

题外话:Google 是如何找到所有这些 URL 的?


搜索引擎的“入站跟踪链接”

正是出于这个原因,主题第一个帖子中自动生成的“来自其他主题的入站跟踪链接”也应该对搜索引擎可见。
现在这些“入站跟踪链接”在爬虫视图中缺失。 编辑:它们已在爬虫视图中。

但指向帖子 URL 而不是主题 URL(参见 HTML 源代码)
<div class="crawler-linkback-list" itemscope="" itemtype="http://schema.org/ItemList">
      <div itemprop="itemListElement" itemscope="" itemtype="http://schema.org/ListItem">
        <a href="https://meta.discourse.org/t/removing-the-2-3-4-etc-links-for-each-reply-within-a-topic-url/209648/26" itemscope="" itemtype="http://schema.org/DiscussionForumPosting" itemprop="item">
          <meta itemprop="url" content="https://meta.discourse.org/t/removing-the-2-3-4-etc-links-for-each-reply-within-a-topic-url/209648/26">
          <span itemprop="name">移除主题 URL 中每个帖子的 /2, /3, /4 等链接</span>
        </a>
        <meta itemprop="position" content="2">
      </div>
</div>
3 个赞

这是一个关键点。让所有页面被索引是一回事,为它们获得相关的排名是另一回事。根据我的经验(在大型发布商网站上),巧妙的内部链接是实现这一目标的关键。

1 个赞

我今天早上刚更新,你推荐启用此项的非规范页面的索引吗?

我不想让我的索引变得更糟

1 个赞

对于在 OP 发布日期之后更新其网站的任何人。

我们的数据显示,新的标头减少了这些页面的抓取时间,并且它们始终设置了规范化。

但那些页面无论如何都不应该被抓取。带有 URL 的元数据是在主题级别设置的,我们不希望 Google 抓取帖子级别的内容,因为它是重复内容。

太好了,这里没有什么需要改变的。

在运行时这样做可能 CPU 成本太高,并且为每个帖子保存两个版本会占用过多磁盘空间。

我们的默认设置始终是我们推荐的。但是,我们维护和公布站点设置,以便人们在觉得默认设置不适合他们的网站时可以选择其他设置。

5 个赞

那太好了,我就按推荐的设置来。
谢谢。

2 个赞

最后一件事情,然后我不再打扰了 :sweat_smile:

那么 sitemap_recent.xml 中包含此类链接是否存在问题?
https://meta.discourse.org/t/category-moderator-improvements/158628?page=2

1 个赞

该示例是一个规范页面,因此不会受到 OP 中概述的更改的任何影响。

2 个赞

我看到当有指向帖子 URL 的外部链接时,会产生巨大的差异。

# A:
外部域
|
|--(链接权重)---> 帖子 URL
                   |
                   |__/ 抓取:      \---> 帖子 URL 未被索引,
                      \ header noindex /     链接权重基本丢失

# B:
外部域
|
|--(链接权重)---> 帖子 URL
                   |
                   |__/ 抓取:        \__|---> 帖子 URL 未被索引
                      \ answer canonical /  |---> 主题 URL(无论如何)被索引
                                                 并转移链接权重

我们应该在

上提出这个问题

1 个赞

对于像我这样的搜索引擎优化新手来说,这是否意味着它是一项搜索引擎优化改进,可能会在谷歌搜索结果中带来轻微的增加/好处?

3 个赞

是的,这就是目标!

我们在一个科技新闻社区测试了这个改动几个月,发现匿名页面浏览量有了很大的峰谷增长。我们的最终目标始终是让所有的 Discourse 社区在各方面都更健康。

6 个赞

在 Google Search Console 的“设置”->“抓取”->“抓取统计信息”报告中可以看到这种效果吗?

1 个赞

考虑到…

A. 减少抓取

B. 内容不应有两个版本

C. 使用 canonical 标签

D. 不使用 nofollow

E. 不使用 noindex

…并且内部链接位于…

…我建议以下实现方式以获得最佳折衷:

  1. 不添加 http-header X-Robots-Tag: noindex
    – 考虑到 [E] –
  2. 保持 canonical 标签始终指向主题URL。
    – 减少抓取 [A] 并考虑 [C] –
  3. 仅用于爬虫视图: 将自动生成的链接转换为始终链接到主题URL而不是帖子URL – 对于主题第一个帖子中的所有链接,“入站跟踪链接(来自其他主题)”和“主题地图打开:主题链接/喜欢的链接”。
    – 减少抓取 [A] 并考虑 [D],但故意忽略 [B] –
    关于 [B]:CPU消耗仅用于爬虫访问,并且包括进行正则表达式替换以截断内部URL末尾的数字(例如 …/t/example-topic/1234/5…/t/example-topic/1234),仅限于主题第一个帖子中的“入站跟踪链接(来自其他主题)”和“主题地图打开”的边界内。
  4. 用于所有视图: 向引用和用户内容中手动添加的链接添加内部 nofollow
    – 减少抓取 [A] 并考虑 [B],但略微忽略 [D] –
    关于 [D]:重要链接已自动复制到“主题地图打开:主题链接/喜欢的链接”部分中的第一个主题[参见 3.],并且大多数引用仍然保留在主题本身内部。

关于内部链接的一些想法

Google 在 How to Specify a Canonical with rel="canonical" and Other Methods | Google Search Central  |  Documentation  |  Google for Developers 中说道:

Google 在 SEO Link Best Practices for Google | Google Search Central  |  Documentation  |  Google for Developers 中说道:

因此,Discourse 可能会这样设置内部链接:

<a href="/t/example-topic/1234" routerLink="/t/example-topic/1234/5">…</a>

对于Google来说,链接直接指向规范的主题URL …/1234 – 而Google无法从这种链接语法中得知帖子URL …/1234/5

对于用户导航,Ember应用程序中的一些附加JavaScript将起到作用:
例如,将 href 替换为 routerLink

2 个赞

看起来是个很棒的改进!感谢 @Falco 和 Discourse 团队促成此事!

3 个赞