ReadTheDocs robots.txt и sitemap.xml

ReadTheDocs автоматически создает robots.txt и sitemap.xml для проектов. Каждый раз, когда я развертываю новую второстепенную версию своего проекта (например, 4.1.10), я скрываю предыдущие второстепенные версии (например, 4.1.9). ReadTheDocs добавляет записи для всех версий в sitemap.xml, но скрытые версии также добавляются в robots.txt. В результате отправленные карты сайта в Google Search Console на данный момент приводят к тому, что отправленный URL-адрес заблокирован ошибками robots.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, это latest, develop и stable, меня не очень заботит сканирование каждой версии. Но все, что я могу настроить, как я понимаю это из документации ReadTheDocs, является статическим robots.txt.

Я хочу опубликовать собственное статическое sitemap.xml вместо использования автоматически сгенерированного. Любой способ сделать это?


person alexdlaird    schedule 23.08.2020    source источник


Ответы (1)


Поигравшись с несколькими идеями, вот решение, с которым я пришел. Поскольку этот вопрос часто задают и часто задают как ошибку в ReadTheDocs на GitHub (а это не так, он просто плохо поддерживается и/или документирован), я поделюсь здесь своим обходным решением, чтобы другие могли его найти.

Как упоминалось выше и в документах, в то время как ReadTheDocs позволяет вам переопределить автоматически сгенерированный robots.txt и опубликовать свой собственный, вы не можете с sitemap.xml. Непонятно почему. В любом случае, вы можете просто опубликовать другой sitemap.xml, я назвал свой sitemap-index.xml, а затем указать robots.txt, чтобы он указывал на вашу пользовательскую карту сайта.

Для моего пользовательского sitemap-index.xml я помещаю только те страницы, которые мне интересны, а не когда-либо сгенерированные версии (поскольку stable и latest — это действительно то, что я хочу, чтобы поисковые системы сканировали, а не страницы с версиями):

<?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, а в свой файл Sphinx conf.py (который находится в /docs) добавил:

html_extra_path = ["_html"]

Это также показано в репозитории, для справки.

После того, как ReadTheDocs пересоберет нужные ветки, укажите /en/latest/sitemap-index.xml в Google Search Console вместо стандартного, спросите Google повторно обработает ваш robots.txt, и не только будут устранены ошибки сканирования, Google правильно проиндексирует сайт, который скрывает предыдущие второстепенные версии.

person alexdlaird    schedule 25.08.2020