# RSS重复内容：SEO问题

**URL:** https://meta.discourse.org/t/seo-problems-with-rss-duplicate-content/299375
**Category:** Support
**Tags:** rss-polling, seo
**Created:** [2024年三月14日 17:40 UTC](https://meta.discourse.org/t/seo-problems-with-rss-duplicate-content/299375 "2024-03-14T17:40:15Z")
**Posts on this page:** 6
**Page:** 1

<div class="post-metadata">

### Author: ![ecki](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/ecki/32/264025_2.png) [@ecki](https://meta.discourse.org/u/ecki)
#### Post date: [2024年三月14日 17:40 UTC](https://meta.discourse.org/t/seo-problems-with-rss-duplicate-content/299375/1 "2024-03-14T17:40:15Z")

</div>

我们使用 RSS 插件（或手动复制）来发布博客文章，并在一个类别中创建讨论锚点。Google 不喜欢这种“复制”的内容，并威胁要损害博客的 SEO 声誉。

当然，我们可以阻止 Google 索引 discourse（或该类别），但有没有人有过经验，可以以某种方式定义这是故意的。比如“这个子域名属于博客，我们不尝试建立链接农场”之类的？如果有，如何在 discourse 设置中实现？

我大概记得，使用 `rel=nofollow` 或类似的标签至少可以解决反向链接农场的问题（不确定内容重复的问题）。有没有一个“这是副本”的标头可以安抚 Google？

---

<div class="post-metadata">

### Author: ![simon](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/simon/32/339122_2.png) [@simon](https://meta.discourse.org/u/simon)
#### Post date: [2024年三月14日 18:43 UTC](https://meta.discourse.org/t/seo-problems-with-rss-duplicate-content/299375/2 "2024-03-14T18:43:48Z")

</div>

> [@ecki](#):
>
> 类似“这个子域属于博客，我们不尝试建立链接农场”之类的说法？如果是这样，如何在 Discourse 设置中实现？

`embed set canonical url` 站点设置可能有助于解决此问题：

 ![image](https://global.discourse-cdn.com/meta/original/4X/d/1/e/d1e1c82223eb31a65558326ce8ccd2abcf7d518a.png)

不过，值得查看 Google 的文档：

- [How to Specify a Canonical with rel="canonical" and Other Methods | Google Search Central &nbsp;|&nbsp; Documentation &nbsp;|&nbsp; Google for Developers](https://developers.google.com/search/docs/crawling-indexing/consolidate-duplicate-urls) （此链接的文本为什么是法语？）
- [5 common mistakes with rel=canonical &nbsp;|&nbsp; Google Search Central Blog &nbsp;|&nbsp; Google for Developers](https://developers.google.com/search/blog/2013/04/5-common-mistakes-with-relcanonical)

我链接到文档的原因是，我不确定在启用 `embed truncate` 设置时启用 `embed set canonical url` 设置的情况。当启用 `embed truncate` 时，Google 在 Discourse 上实际只能抓取到原始文章的片段。如果用户点击“显示完整帖子”按钮，完整文章将在 iframe 中显示。我很确定 iframe 内容不会被 Google 抓取。“5 个常见错误”文章中的第一点似乎解决了这个问题。

---

<div class="post-metadata">

### Author: ![ecki](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/ecki/32/264025_2.png) [@ecki](https://meta.discourse.org/u/ecki)
#### Post date: [2024年三月15日 10:18 UTC](https://meta.discourse.org/t/seo-problems-with-rss-duplicate-content/299375/3 "2024-03-15T10:18:28Z")

</div>

感谢Simon的提示！确实，规范链接（canonical）似乎正是我想要的。我试了一下，但它并没有完全奏效，它嵌入了一个指向自身的规范URL，而不是RSS源：

```
<link rel="canonical" href="https://community.domain.com/t/invoicing-mandate/537?page=0" />

```

而不是

```
<link rel="canonical" href="https://blog.domain.com/t/invoicing-mandate/537" />

```

（这是 stable/3.2.0）

另外，这个是否应该也被设置为特色链接（featured link）？

在我们的例子中，我们不使用截断（truncate）（尽管RSS Feed已经被截断了）。但我希望Google仍然会接受它。

---

<div class="post-metadata">

### Author: ![simon](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/simon/32/339122_2.png) [@simon](https://meta.discourse.org/u/simon)
#### Post date: [2024年三月15日 20:04 UTC](https://meta.discourse.org/t/seo-problems-with-rss-duplicate-content/299375/4 "2024-03-15T20:04:33Z")

</div>

> [@ecki](#):
>
> 我试过了，但它没有完全起作用，它嵌入了一个指向自身的规范 URL，而不是指向 RSS 源：

尝试查看页面源代码，而不是使用浏览器的网页检查器查看。我认为您会看到，当您查看页面的源代码时，规范 URL 被设置为 RSS 帖子的 URL，而当您使用网页检查器查看 HTML 时，它被设置为 Discourse 主题的 URL。如果这是正确的，您应该不会收到有关 RSS 主题的重复内容警告。

这是我在使用网页检查器查看从 Discourse RSS feed 拉入的主题时看到的内容（启用了 `embed set canonical url`）：

 ![image](https://global.discourse-cdn.com/meta/original/4X/0/7/8/078a41b827a2a2528b3d42a63599361d1bab0bd0.png)

这是我在查看页面源代码时看到的规范 URL（通过右键单击页面并从菜单中选择“查看页面源代码”）：

```plaintext

<link rel="canonical" href="https://blog.discourse.org/2023/03/how-discourse-scaled-to-10m-arr-with-only-1-salesperson" />

```

带有正确设置的规范 URL 的查看页面源代码版本是爬虫将看到的内容。

另一种查看差异的方法是使用网页检查器，但选择 Googlebot 作为用户代理：

 ![image](https://global.discourse-cdn.com/meta/original/4X/9/a/1/9a1d9f5c693e171011d20c7da5043476addf01f0.png)

我认为该设置在爬虫看到的方面符合预期，但它让我感到困惑。问题似乎是 Discourse 在查看启用了 JavaScript 的页面时，会使用 JavaScript 覆盖规范 URL 属性。供参考，这发生在：

[https://github.com/discourse/discourse/blob/main/app/assets/javascripts/discourse/app/instance-initializers/meta-tag-updater.js#L25-L27](https://github.com/discourse/discourse/blob/main/app/assets/javascripts/discourse/app/instance-initializers/meta-tag-updater.js#L25-L27)

> [@ecki](#):
>
> 这也可以/应该被设置为特色链接吗？

我认为（目前）无法为从 RSS feed 创建的主题设置特色链接。我不是 SEO 专家，但我不认为设置或不设置它会对 SEO 产生任何影响。

---

<div class="post-metadata">

### Author: ![ecki](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/ecki/32/264025_2.png) [@ecki](https://meta.discourse.org/u/ecki)
#### Post date: [2024年三月15日 23:09 UTC](https://meta.discourse.org/t/seo-problems-with-rss-duplicate-content/299375/5 "2024-03-15T23:09:15Z")

</div>

我使用了 `curl -i | grep canon` 并看到了一个错误的标签 URL（没有标头），但我可以尝试使用不同的 UA 再次尝试（这有点奇怪），- 我不得不重新创建了帖子几次，所以也许我感到困惑。我会在此处更新。

> [@](#):
>
> 我认为设置或不设置它不会对 SEO 产生任何影响

确实，精选链接不是为了 SEO，但我的内部愿望是让博客链接更加可见。而且由于它是相同的 URL……

（但看起来我得到了一长串要求，所以我可能需要分叉 rss-poll（不幸的是，看起来大部分工作不是在插件中完成的）。嵌入代码是否也可以扩展？

---

<div class="post-metadata">

### Author: ![simon](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/simon/32/339122_2.png) [@simon](https://meta.discourse.org/u/simon)
#### Post date: [2024年三月16日 16:07 UTC](https://meta.discourse.org/t/seo-problems-with-rss-duplicate-content/299375/6 "2024-03-16T16:07:11Z")

</div>

> [@ecki](#):
>
> 我使用了 `curl -i | grep canon` 并看到了一个错误的标签 URL

对于从 RSS feed 创建的主题，并启用了 `embed set canonical url`，我期望 `curl -i` 返回 RSS item 的 URL 作为规范 URL。在我本地站点测试时，这可以正常工作。

假设您可以访问 Discourse 的 Rails 控制台，您可以通过查找主题，然后检查其 `topic_embed` 属性来确认正在发生什么。例如：

```plaintext
t = Topic.find 495
t.topic_embed

```

或者仅仅是：

```plaintext
TopicEmbed.find_by(topic_id: 495)

```

应该会返回一个 `TopicEmbed`。它的 `embed_url` 是 Discourse 用来设置主题规范 URL 的预期值。

> [@ecki](#):
>
> 嵌入代码是否也可以扩展？

我自己也曾对此感到好奇。这比修改 RSS 插件要困难，因为嵌入是 Discourse 核心代码的一部分。
