Почему do_robots() разрешает доступ к /wp-admin/admin-ajax.php по умолчанию?
Это происходит даже при чистой установке WordPress. Достаточно взглянуть на функцию do_robots(), которая выводит следующее:
User-agent: *
Disallow: /wp-admin/
Allow: /wp-admin/admin-ajax.php
Sitemap: https://knowingart.com/wp-sitemap.xml
Отправка роботов в "wp-admin" (по умолчанию) не имеет смысла:
- Зачем вообще отправлять случайных роботов в мою админку? Админка предназначена только для меня. Роботы/краулеры не должны ничего делать в моей админ-директории.
- Зачем организовывать DOS-атаку на самого себя, отправляя роботов к админ-скрипту?
- Если бы я был разработчиком бота, я мог бы (ошибочно) интерпретировать это "allow" как отмену "disallow", потому что allow идет после disallow для той же директории. Почему robots.txt противоречит сам себе?
- Этот странный (по умолчанию) robots.txt ломает DuckDuckGo. Например, в топе поиска моя директория wp-admin?! Похоже, DuckDuckGo прочитал мой robots.txt, зашел в wp-admin, потому что robots.txt разрешил это, хотя это неправильная директория. Разработчики DuckDuckGo запутались в этом странном robots.txt? Хотя более вероятно, что DDG просканировал мой блог до появления контента и просто еще не обновил результаты.
Зачем WordPress посылает поисковых роботов в админ-директорию, где нет контента?! Это не имеет никакого смысла, поэтому я пытаюсь разобраться. Можно предположить, что автор этого кода do_robots() не понимает назначения robots.txt.

Во-первых: ознакомьтесь с robots.txt, если вы этого еще не сделали. Еще одним хорошим источником информации является эта статья от Yoast.
Пример, который вы привели:
User-agent: *
Disallow: /wp-admin/
Allow: /wp-admin/admin-ajax.php
Sitemap: https://knowingart.com/wp-sitemap.xml
...говорит всем пользовательским агентам (то есть всем краулерам), что им не разрешено сканировать что-либо в вашей директории wp-admin
, за исключением /wp-admin/admin-ajax.php
, который необходим WordPress для корректной работы AJAX.
Это не приглашение для роботов посетить вашу директорию /wp-admin/
; это указание, что они там нежелательны (за исключением требования для AJAX).
Что касается вашего вопроса №4, боюсь, у меня нет на него ответа.

@PJBrunet admin-ajax.php очень часто используется для публичных AJAX-запросов на фронтенде веб-сайта. Если запросы к этому файлу от ботов запрещены, то при сканировании вашего сайта поисковым ботом эти запросы не будут работать, и бот потенциально увидит сломанную версию страницы.

robots.txt
не имеет отношения к доступу WordPress к самому себе. Этот файл предназначен для инструкций поисковым роботам, сообщая им, куда они могут (и, что важнее) не могут заходить на сайте.

@JacobPeattie Я понимаю точку зрения Джейкоба, Google действительно применяет специальные методы для рендеринга страницы и анализа интерфейса, что было правдой ещё со времён Мэтта Каттса. Однако роль robots.txt не в том, чтобы угождать именно Googlebot. Если это действительно проблема, пусть разработчик темы её исправит или обратится в Google. Я понимаю, что SEO для Google очень важно для многих, но это всего лишь один робот среди многих — и, честно говоря, мне всё равно, если чья-то тема требует admin-ajax.php для корректного отображения. Проблемы SEO, специфичные для темы (темы, которые не деградируют корректно), не должны проникать в robots.txt.

Хотя я поддержал ваш ответ, здесь есть проблемы. Во-первых, моё беспокойство по поводу порядка allow/disallow — это реальная проблема https://core.trac.wordpress.org/ticket/33156#comment:18 Независимо от спецификации robots.txt, лучше быть конкретным и понятным, потому что каждый робот будет интерпретировать robots.txt по-своему, независимо от спецификации.

Что касается проблемы с AJAX, в связи с тем, что темы корректно отображаются для Googlebot или из-за сбоя в Инструментах для веб-мастеров, ни одна из этих проблем не относится к robots.txt. AJAX-страницам не требуется AJAX для отображения в поисковой системе. "Ленивая загрузка" контента не должна ломать Googlebot. Разработчики AJAX могут и должны загружать контент-заполнители, другими словами, AJAX-секции с контентом могут и должны корректно работать при сбоях. Плохо закодированные темы не должны загрязнять robots.txt

Правда в том, что, вероятно, ничего не должно блокироваться в robots.txt
на уровне ядра (если я правильно помню, это была позиция Joost по этому вопросу), так как WordPress — это открытая платформа, и контент фронтенда, а также стили могут генерироваться в самых разных директориях, что может казаться бессмысленным для вас и меня. WordPress не занимается тем, чтобы препятствовать владельцам сайтов устанавливать плохо написанные плагины.
Почему у вас есть страницы, проиндексированные поисковой системой? WordPress использует заголовки типа "не индексировать" для всех административных страниц, так что, скорее всего, у вас есть плохо написанный код, который мешает отправке этого заголовка. (Это предполагает, что нет бага в Bing, который является поисковой системой, стоящей за DDG).
Возможно, стоит напомнить, что robots.txt — это всего лишь рекомендательный файл, и поисковая система сама решает, соблюдать его или нет и в какой степени. Если я правильно помню, Google не будет полностью следовать ему, если есть ссылка на страницу, которая должна быть исключена по robots.txt.

Я согласен, что "ничего не должно блокироваться", и на самом деле WordPress вообще не должен автоматически генерировать robots.txt. Ответ таков: WordPress допустил ошибку. Исторически цель robots.txt — давать рекомендации краулерам. Однако я слышу, как многие говорят о robots.txt в контексте тем, "фронтенда" и т.д. Даже если бы была проблема с тем, что Google присылает уведомления по электронной почте через Webmaster Tools, это не является задачей robots.txt (Googlebot — всего лишь один из множества краулеров). И конечно, если есть проблемы с Googlebot, которые нельзя решить через Google, NginX/Apache и другие инструменты могут с этим справиться.

"Скорее всего, у вас плохо написанный код" Нет, это свежая установка WordPress из latest.tar.gz, с использованием темы от Automattic, загруженной через панель управления. Впрочем, похоже, что DDG уже обновился и исправил ошибку.
