Статьи не доходят до сайта: разбор журнала доставок
Содержание
Где смотреть
Откройте Настройки сайта → Доставки. Там видна каждая попытка отправки: событие, код ответа, длительность и то, что именно ответил ваш обработчик. Раскройте запись, чтобы увидеть все попытки цепочки и тело ответа.
Подпись не совпала (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 и анонсы в соцсетях.
В этом разделе
Была ли статья полезна?