Discourse-indexnow — мгновенное уведомление Bing и Yandex о создании или редактировании тем

:information_source: Сводка Автоматически отправляет публичные URL тем при создании, редактировании, удалении и ответах в протокол IndexNow, чтобы Bing, Yandex и другие совместимые поисковые системы могли обнаружить или удалить ваш контент в течение минут, не дожидаясь сканеров.
:hammer_and_wrench: Репозиторий github.com/imlotso/discourse-indexnow
:open_book: Руководство по установке Как установить плагины в Discourse

Также доступна статья на китайском языке с дополнительной информацией на моем форуме: sitetalk.net/t/topic/642

Возможности

  • Автоматическая отправка новых публичных тем; повторная отправка при изменении первого сообщения или критических атрибутов темы.
  • Отправка при ответе: Автоматически отправляет URL с пагинацией (например, ?page=3) при публикации новых ответов, с настраиваемым временем ожидания (cooldown) для каждого URL для предотвращения спама.
  • Автоматическая отправка URL тем при удалении, чтобы помочь поисковым системам обнаружить ошибки 404/410 и быстро удалить их из выдачи.
  • Автоматически группирует локализованные URL тем, когда активны локализация контента и параметры запроса локали сканера. Использует фактически настроенный параметр локали, а не захардкоженное значение.
  • Объединяет канонические и локализованные URL в единые пакетные запросы urlList IndexNow, вместо отправки по одному.
  • Заполнение истории (Backfill): Фильтрация по категории и диапазону дат, предпросмотр количества совпадений и пакетная отправка. Автоматическое разбиение на части для пакетов, превышающих лимит протокола в 10 000. Активные задачи можно отменить на вкладке Журнал.
  • Ручная отправка: Отправка пользовательских URL по запросу, строка за строкой; внешние или неподходящие ссылки автоматически отфильтровываются.
  • Умное ограничение частоты: Применяет почасовые и суточные лимиты, используя алгоритм скользящего окна с высокой точностью. Автоматически замедляет работу при ошибке 429 (с учетом заголовка Retry-After). В административном интерфейсе есть визуальные Полосы квоты, показывающие текущее использование и точное время до освобождения квоты.
  • Исключение определенных категорий и тегов как правила бизнес-логического уровня поверх автоматических фильтров конфиденциальности.
  • Ротация ключей с диалогом подтверждения случайного перезаписывания; предыдущие ключи немедленно аннулируются.
  • Административная проверка публичной доступности /<key>.txt.
  • Перемещение тем, изменение видимости категорий и обновление тегов вызывают асинхронную повторную отправку или исключение в фоновых задачах, чтобы предотвратить блокировку интерфейса.
  • Подробные записи журнала с ID пакетов, локалью, причинами срабатывания, диаграммами тенденций успеха/неудачи за 7 дней и категоризированными причинами сбоев (Ограничение частоты, Ошибка ключа, Несоответствие домена).
  • Полностью асинхронная отправка с соблюдением границ конфиденциальности: личные сообщения, ограниченные категории, скрытые/удаленные темы и сайты, требующие входа, никогда не отправляются.
  • Доступно на английском и упрощенном китайском языках.

Шаги настройки

  1. Установите плагин, следуя руководству выше, и пересоберите ваш контейнер.
  2. Перейдите в Администрирование > Плагины > discourse-indexnow.
  3. В разделе Настройки нажмите Сгенерировать ключ (или вставьте существующий 32-символьный hex-ключ).
  4. Отметьте Включить отправки IndexNow.
  5. Проверьте публичную доступность ключа:
https://your-forum-domain.com/<key>.txt

Должен возвращать HTTP 200 со строкой ключа. Панель администратора также отображает индикатор (зеленый/красный) из кэша.
6. (Необязательно) На вкладке Журнал используйте панель «Backfill»: выберите критерии, нажмите Предпросмотр, затем Отправить.
7. (Необязательно) Используйте поле ручной отправки для отправки отдельных URL вне автоматического процесса.

Страница журнала также содержит полосы использования квоты, диаграмму тенденций за 7 дней и метрики разбивки сбоев для легкого диагностирования проблем с отправкой.

Настройки конфигурации

Настройка Описание
indexnow_enabled Главный переключатель. Автоматически отключается, если включен login_required.
indexnow_api_key 32-символьный hex-ключ для верификации отправки.
indexnow_submit_on_create Автоотправка при создании новой публичной темы.
indexnow_submit_on_edit Автоповторная отправка при изменении первого сообщения или атрибутов темы.
indexnow_submit_on_reply Автоотправка конкретного URL с пагинацией при публикации новых ответов.
indexnow_url_cooldown_minutes Период ожидания (cooldown) для каждого URL (в минутах) для предотвращения дублирования отправки.
indexnow_excluded_category_ids Категории, которые следует исключить, даже если они публичные.
indexnow_excluded_tag_names Теги, которые следует исключить, даже если категория темы подходит.
indexnow_hourly_limit Максимальное количество URL для отправки в час (скользящее окно).
indexnow_daily_limit Максимальное количество URL для отправки в день (скользящее окно).

Известные ограничения

  • Google в настоящее время не участвует в протоколе IndexNow.
  • Локализованные URL отправляются только тогда, когда активны параметры локали сканера и существует локализованный контент.
  • В настоящее время поддерживаются редактирование первого сообщения и пагинация новых ответов, но редактирование промежуточных ответов не вызывает отправку независимо.

Это независимый неофициальный плагин — он не поддерживается командой Discourse. Он работает в продуктивной среде на моем собственном форуме, имеет покрытие тестами RSpec с CI при каждом пуше/PR, и я буду признателен за любые сообщения об ошибках или запросы функций через GitHub issues или ответы здесь.

7 лайков

Спасибо за это! Я буквально только что спрашивал себя, нужно ли мне самому делать плагин для Indexnow? И вот! Нашёл это!

Подскажи, пожалуйста: метод indexnow_submit_on_edit отправляет запрос на индексацию при каждом пересобирании (rebake), которое изменяет контент?

Нет — срабатывание происходит только при настоящих правках через обычный поток PostRevisor и только для первого поста темы (OP). Ответы, не являющиеся OP, и повторные пересборки, инициированные системой (например, cron-задачи по исправлению изображений, массовая пересборка администратором и т. д.), не вызывают повторную отправку, поскольку они не проходят через событие, на которое этот плагин реагирует.

Я пользуюсь этим плагином уже неделю, и он мне очень нравится. Он работает ровно так, как мне нужно, хотя я столкнулся с несколькими ошибками, из-за которых плагин сразу же выходил из строя после установки.

В частности, я обнаружил конфликты маршрутов с другими плагинами, использующими те же конечные точки. Также была проблема с ограничением частоты запросов: отправка могла достигать лимита, ждать несколько минут, а затем снова его превышать. Кроме того, таблица стилей админ-панели внедрялась в публичные области, а классы CSS не были должным образом префиксированы для плагина.

Я также добавил функцию, которую очень хотел: возможность отправлять уведомления, когда на тему появляется ответ. Эта привязана к конкретному номеру страницы, чтобы не обрабатывать всю тему целиком. Для тем со сотнями ответов отправляется только последняя страница, что помогает поисковому роботу быстрее находить ответ и обновлять тему.

2 лайка

Слилось.

Спасибо, что уделил время и так глубоко погрузился в код. Логика группировки для скользящего окна и пакетная обработка фоновых задач — это серьёзные улучшения. Отличное решение и с триггером ответа.

Я обновил документацию основного поста, чтобы охватить новые полосы квот и настройки кулдауна, которые ты добавил.

Очень ценю высококачественный PR и подробное описание. :content:

1 лайк