| Описание | Автоматическая отправка URL открытых тем после их создания, редактирования и удаления по протоколу IndexNow, чтобы совместимые поисковые системы, такие как Bing и Yandex, могли обнаружить или удалить ваш контент за считанные минуты, а не ждать, пока краулеры постепенно проиндексируют его. | |
| Репозиторий | github.com/imlotso/discourse-indexnow | |
| Руководство по установке | How to install plugins in Discourse |
Возможности
- Автоматическая отправка при создании новой темы; автоматическая повторная отправка при редактировании, если изменён первый пост или ключевые параметры темы.
- Отправка при ответе: при появлении нового ответа автоматически отправляется URL соответствующей страницы (например,
?page=3), также поддерживается время охлаждения для одного URL, чтобы предотвратить частые повторные отправки. - Автоматическая отправка URL при удалении темы, что помогает поисковым системам быстрее обнаружить 404/410 и ускорить удаление контента из индекса.
- При включённой локализации контента и параметре locale для краулера автоматически отправляются URL локализованных тем — используются реальные параметры locale, настроенные в Discourse, без хардкода.
- Объединение основного URL и уже существующих локализованных URL в один пакетный запрос IndexNow
urlList, а не поочерёдная отправка. - Пополнение исторических записей: фильтрация тем по категориям и диапазону дат, предварительный просмотр результата, затем пакетная отправка — используется тот же механизм пакетной отправки, а при превышении лимита в 10 000 URL за раз автоматически происходит разбиение на части. Пакеты, которые всё ещё обрабатываются (например, при выборе слишком большого диапазона), можно отменить на вкладке журналов.
- Ручная отправка: достаточно вставить URL по одному в каждую строку, чтобы отправить выбранные ссылки в дополнение к обычному автоматическому процессу; внешние ссылки и неподходящие темы автоматически фильтруются.
- Интеллектуальное ограничение и управление квотами: поддержка hourly/daily лимитов на основе скользящего окна (sliding window). При получении ответа
429от IndexNow автоматически применяется экспоненциальная задержка (приоритет отдаётся заголовкуRetry-After). В панели администратора отображается наглядный индикатор использования квоты и обратный отсчёт до её восстановления. - Поддержка исключения определённых категорий и тегов, добавляя слой бизнес-логики поверх автоматической фильтрации конфиденциальности.
- Поддержка ротации ключей (с подтверждением для предотвращения случайных нажатий); при генерации нового ключа старый сразу перестаёт действовать.
- Встроенная проверка доступности
/<key>.txtв панели администратора. - При перемещении темы между категориями, изменении видимости категории или обновлении тегов автоматически выполняется асинхронная повторная отправка или исключение; массовые операции не блокируют страницу.
- Журналирование ID пакета, locale, причины (создание / редактирование / удаление / изменение категории / пополнение / ручная), трендов успешных/неуспешных отправок за последние 7 дней, а также классификация причин ошибок (ограничение / ошибка ключа / несоответствие домена / другое).
- Все отправки выполняются асинхронно и проходят через ту же логику фильтрации конфиденциальности, что и автоматическая отправка: личные сообщения, ограниченные категории, темы без списка / удалённые, а также сайты с требованием входа — никогда не отправляются.
- Интерфейс управления доступен на английском и китайском (упрощённом) языках.
Шаг настройки
- Установите плагин согласно руководству выше, выполните перезагрузку контейнера.
- Откройте Admin > Plugins > discourse-indexnow.
- На вкладке Settings нажмите Generate key (или введите 32-значный шестнадцатеричный ключ, зарегистрированный ранее).
- Отметьте галочку Enable IndexNow submissions.
- Убедитесь, что ключ доступен из интернета:
https://<домен-вашего-форума>/<key>.txt
Должен возвращаться HTTP 200, а содержимое — сам ключ. Панель администратора также автоматически выполняет эту проверку и показывает зелёный/красный статус с учётом кэша рядом с надписью «key.txt доступен».
6. (по желанию) На вкладке Logs используйте панель «пополнение»: выберите категорию и диапазон дат, нажмите Preview, чтобы увидеть количество совпадений, затем Submit. Если пакет всё ещё обрабатывается, его можно отменить на той же странице.
7. (по желанию) Используйте поле ручной отправки: вставьте URL по одному в каждую строку, чтобы немедленно отправить выбранные ссылки помимо обычного автоматического потока.
На странице журналов также отображается индикатор использования квоты, график успешных/неуспешных отправок за последние 7 дней и статистика по причинам ошибок, что позволяет одним взглядом понять, была ли ошибка связана с ограничением, несоответствием ключа или другой причиной.
Параметры конфигурации
| Название | Описание |
|---|---|
indexnow_enabled |
Общий переключатель плагина. Не может быть включён, если на сайте установлен login_required; если этот параметр активируется позже, плагин автоматически отключается. |
indexnow_api_key |
Текущий 32-значный шестнадцатеричный ключ, используемый для проверки при отправке. |
indexnow_submit_on_create |
Автоматическая отправка при создании новой открытой темы. |
indexnow_submit_on_edit |
Автоматическая повторная отправка после изменения первого поста или атрибутов темы. |
indexnow_submit_on_reply |
Автоматическая отправка URL страницы с ответом при появлении нового ответа. |
indexnow_url_cooldown_minutes |
Время охлаждения (в минутах) для предотвращения частых повторных отправок одного и того же URL. |
indexnow_excluded_category_ids |
Дополнительные исключаемые категории; даже если категория публичная, её темы не будут отправляться. |
indexnow_excluded_tag_names |
Дополнительные исключаемые теги; даже если тема соответствует критериям отправки, она не будет отправлена. |
indexnow_hourly_limit |
Максимальное количество URL, отправляемых за час (на основе скользящего окна). |
indexnow_daily_limit |
Максимальное количество URL, отправляемых за день (на основе скользящего окна). |
Известные ограничения
- Google пока не присоединился к протоколу IndexNow.
- Локализованные URL отправляются только при включённом параметре locale для краулера и при наличии соответствующего локализованного контента.
- На данный момент поддерживаются редактирование первого поста и изменение страниц с ответами, однако отдельное редактирование промежуточных постов не запускает повторную отправку.
Это плагин независимого разработчика, не поддерживаемый официально Discourse. Он уже работает на моём личном форуме в продакшене, сопровождается тестами RSpec и проходит CI при каждом push/PR. Буду благодарен за обратную связь и предложения о функциях через GitHub issue или ответы в этой теме.
