阅读TheDocs机器人.txt和站点地图.xml



ReadTheDocs 自动生成项目的robots.txtsitemap.xml。每次我部署项目的新次要版本时(例如。4.1.10),我隐藏了以前的次要版本(例如。4.1.9)。ReadTheDocs 将所有版本的条目添加到sitemap.xml中,但隐藏版本也会添加到robots.txt中。结果是,此时提交到Google Search Console的站点地图会导致"提交的URL被机器人阻止.txt"错误,因为以前的站点地图条目现在被新生成的robots.txt阻止

。ReadTheDocs 为每个版本生成一个站点地图 URL,因此我们有一个这样的条目4.1.9,例如:

<url>
<loc>https://pyngrok.readthedocs.io/en/4.1.9/</loc>
<lastmod>2020-08-12T18:57:47.140663+00:00</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>

4.1.10发布并且以前的次要版本被隐藏时,新生成的robots.txt将得到:

Disallow: /en/4.1.9/ # Hidden version

我相信这种Disallow是导致Google抓取工具抛出错误的原因。

实际上,我想要的sitemap.xml只是latestdevelopstable,我不太在乎每个版本都被抓取。但是,正如我从ReadTheDocs文档中了解到的那样,我所能配置的只是一个静态robots.txt

我想要的是发布我自己的静态sitemap.xml,而不是使用自动生成的静态。有什么方法可以做到这一点吗?

在尝试了一些想法之后,这是我提出的其他解决方案。由于这个问题经常被问到,并且经常作为针对 GitHub 上的 ReadTheDocs 的错误打开(事实并非如此,它似乎没有得到很好的支持和/或记录),我将在这里分享我的解决方法供其他人找到。

如上所述和文档中提到的,虽然 ReadTheDocs 允许您覆盖自动生成的robots.txt并发布您自己的,但您无法使用sitemap.xml.不清楚为什么。无论如何,您可以简单地发布不同的sitemap.xml,我命名为我的sitemap-index.xml,然后告诉您的robots.txt指向您的自定义站点地图。

对于我的自定义sitemap-index.xml,我只放置我关心的页面而不是生成的版本(因为stablelatest确实是我希望搜索引擎抓取的,而不是版本化的页面):

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml">
<url>
<loc>https://pyngrok.readthedocs.io/en/stable/</loc>
<changefreq>weekly</changefreq>
<priority>1</priority>
</url>
<url>
<loc>https://pyngrok.readthedocs.io/en/latest/</loc>
<changefreq>daily</changefreq>
<priority>0.9</priority>
</url>
<url>
<loc>https://pyngrok.readthedocs.io/en/develop/</loc>
<changefreq>monthly</changefreq>
<priority>0.1</priority>
</url>
</urlset>

我创建了自己的robots.txt,告诉Google不要抓取除我的主要分支之外的任何内容,指向我的自定义sitemap-index.xml

User-agent: *
Disallow: /
Allow: /en/stable
Allow: /en/latest
Allow: /en/develop
Sitemap: https://pyngrok.readthedocs.io/en/latest/sitemap-index.xml

我把这两个文件放在/docs/_html下,在我的狮身人面像conf.py文件(在/docs中)中,我添加了:

html_extra_path = ["_html"]

这也是回购中显示的,供参考。

在 ReadTheDocs 重建必要的分支后,将/en/latest/sitemap-index.xml交给 Google Search Console 而不是默认分支,要求 Google 重新处理您的robots.txt,不仅会解决抓取错误,Google 还会正确索引隐藏以前次要版本的网站。

最新更新