Обработка ограничения скорости для краулеров

У меня общий вопрос о том, как реализовано ограничение скорости для краулеров.

Согласно Reduce Google Crawl Rate | Google Crawling Infrastructure  |  Crawling infrastructure  |  Google for Developers, рекомендуемые HTTP-статусы — 429 (Too many requests) или 503 (Site unavailable).

Однако, просмотрев исходный код, я вижу, что ограничение скорости реализовано путём выбрасывания ошибки: discourse/lib/rate_limiter.rb at 85fddf58bc1e751d0ac5b8192a630c59a34aed7d · discourse/discourse · GitHub

Мои дни работы с Ruby on Rails давно позади, но я предполагаю, что это вызывает общий статус 505?

Краулер Google не совсем понимает механизм ограничения скорости в Discourse, и в Google Search Console я вижу, что после внедрения ограничения индексация и, следовательно, показы резко снизились. Однако это произошло не из-за самого ограничения, а из-за ошибок сервера 5xx.

Я понимаю, что ограничение скорости для инстансов иногда необходимо, если они создают слишком большой трафик, но я ожидал, что Discourse будет возвращать HTTP-статус 429, а не отдавать краулеру ошибку 505 Internal Error.

Думаю, то, что вы ищете, это

Это «глобальный» обработчик исключений контроллера для этой ошибки, который устанавливает код статуса.

Спасибо! Это обнадеживает, но не совсем объясняет, почему Google Search Console сообщает об ошибках 5xx, которые совпадают с моментом внедрения ограничения скорости.

Оно даже сообщает, что не удалось получить файл карты сайта discourse sitemap.xml.

В частности, ограничение частоты запросов для sitemap.xml кажется проблематичным.

Думаю, именно это вызвало разрыв в покрытии. Я могу поверить, что Google ошибочно интерпретировал ошибку 429 как ошибку 5xx.