Статьи не доходят до сайта: разбор журнала доставок

📅 16 сентября 2026 г.3 мин чтения
Содержание

Где смотреть

Откройте Настройки сайта → Доставки. Там видна каждая попытка отправки: событие, код ответа, длительность и то, что именно ответил ваш обработчик. Раскройте запись, чтобы увидеть все попытки цепочки и тело ответа.

Подпись не совпала (401 или 403)

Две обычные причины.

Тело разобрали и собрали заново. Подпись считается от сырых байтов запроса. Если сначала разобрать JSON, а потом сериализовать его обратно, изменится порядок ключей или пробелы — и подпись перестанет сходиться. Читайте тело как сырой текст или байты до разбора и подписывайте именно его.

Разошлись часы. В подписи участвует время отправки, а запросы старше пяти минут положено отвергать. Если часы на вашем сервере отстают или спешат, все запросы будут выглядеть устаревшими. Проверьте синхронизацию времени.

Третья, более редкая причина — недавняя смена ключа. Сутки после неё мы шлём две подписи через запятую, и обработчик обязан проверять каждую, а не только первую.

Подпись не совпала, хотя ключ верный

Если вы поменяли ключ в PHP-файле, а сервис по-прежнему получает «подпись не совпала», дело чаще всего в кэше. На большинстве хостингов включён opcache — он держит скомпилированную версию файла и после правки может продолжать выполнять старую. Внешне файл верный, а работает предыдущий.

Что делать: сбросьте кэш в панели хостинга (обычно это перезапуск PHP-FPM или кнопка «очистить opcache») либо загрузите файл под новым именем и укажите новый адрес в настройках сайта — новый файл кэша ещё не имеет.

Проверено на живом хостинге: после замены ключа старая версия отвечала ошибкой ещё несколько минут, а копия того же файла под другим именем заработала сразу.

Обработчик не найден (404)

Проверьте адрес в настройках сайта: он должен вести именно на обработчик, а не на страницу сайта. Частая ошибка — адрес без префикса, например /seowriter вместо /api/seowriter.

Метод не поддерживается (405)

Обработчик объявлен не для POST. Мы отправляем только POST и не пробуем другие методы.

Переадресация (301, 302)

По переадресациям мы не идём: перенаправление увело бы подписанный запрос на другой адрес. Укажите в настройках конечный адрес — обычно это версия с https и без завершающего слэша либо наоборот.

Слишком большой запрос (413)

Лимит на размер тела. Длинная статья со всей обвязкой весит несколько сотен килобайт, а в nginx по умолчанию стоит один мегабайт. Поднимите client_max_body_size до 5 МБ и перезапустите nginx.

Сайт не ответил вовремя

Мы ждём ответа тридцать секунд. Если обработчик за это время пересобирает статику или обращается к сторонним сервисам, он не успеет. Отвечайте сразу, а работу переносите в фоновую задачу или очередь.

Ошибка сервера (500 и другие 5xx)

Считаем такую ошибку временной и повторяем доставку: через минуту, пять минут, полчаса, два часа и шесть часов. Все попытки видны в журнале вместе с ответом сервера — по нему обычно и понятно, что упало на вашей стороне.

Отправка приостановлена

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

Статья доставлена, но перелинковка не работает

Скорее всего обработчик не вернул адрес опубликованной статьи. В журнале такая доставка помечена предупреждением. Верните в ответе поле url — от него зависят внутренняя перелинковка, отправка в IndexNow и анонсы в соцсетях.

Была ли статья полезна?