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

Правило, которое покрывает большинство случаев
Повторяйте попытки при сетевых сбоях. Никогда не повторяйте попытки при 401 или 402. Первая ошибка исправляется сама через несколько секунд; вторая требует вмешательства человека, а частые повторные запросы лишь засоряют логи.
Каждый ответ JSON содержит поле ok, а аутентифицированные запросы добавляют _credits с указанием стоимости вызова и оставшегося баланса. Проверяйте ok в теле ответа, даже если HTTP-статус выглядит корректно.
Временные интервалы повторных попыток ниже — это наша инженерная рекомендация, а не задокументированные ограничения. В документации к API, которой мы располагаем, нет информации о лимитах частоты запросов, поэтому установите собственный лимит и держите его на умеренном уровне.
Почему 401 и 402 никогда не повторяются
401 — это проблема ключа, а 402 — проблема баланса. Ни одна из них не исправляется сама между двумя попытками с интервалом в секунду, поэтому повторная попытка лишь добавляет шум в логи и ничего больше.
Ожидание также не исправит 402. Баланс остается прежним, пока кто-то не пополнит его через страницу аккаунта, поэтому единственная полезная реакция — четкое сообщение и уведомление владельца бюджета.
Ошибка 401 требует проверки заголовка или параметра ключа, а также проверки того, не был ли ключ заменен. Повторная отправка того же неверного ключа несколько раз ничего не доказывает.
Неверный ключ и пустой баланс также выглядят по-разному в вашей панели управления. Настройте отдельные оповещения, чтобы человека, который пополняет баланс, не будили из-за опечатки в ключе, а человека, который вращает ключи, не вызывали из-за проблемы с балансом.
Сетевые сбои и экспоненциальная задержка
Тайм-аут или сброс соединения могут исправиться самостоятельно, поэтому это единственные случаи, когда стоит попробовать еще раз. Подождите 1, 2, 4 и затем 8 секунд, добавьте немного джиттера и остановитесь после четвертой попытки.
Эти временные интервалы — наша рекомендация, а не задокументированное ограничение. Установите собственный лимит, логируйте каждую повторную попытку и настраивайте оповещения при росте количества попыток, так как растущий уровень повторных попыток обычно является первым признаком проблемы на стороне провайдера.
Держите тайм-аут на вашей стороне явным, в виде именованной константы. Неявный дефолт, который меняется при обновлении библиотеки, — частая причина того, что ночные задачи начинают падать только на одной машине.
Следите за временем ответа провайдера, а не только за частотой ошибок. Медленный ответ, который никогда не падает, все равно может блокировать ваших рабочих процессов, а цикл повторных попыток усугубляет это замедление.
Симптом, причина, реакция
| Симптом | Причина | Повторная попытка? | Что делать |
|---|---|---|---|
| HTTP 401 | Ключ отсутствует, введен с ошибкой или отозван | Нет | Проверьте заголовок или значение key=, затем страницу аккаунта |
| HTTP 402 | Кредиты закончились | Нет | Пополните баланс в USDT (TRC-20) через страницу аккаунта; тот же ключ продолжит работать |
ok не равно true при HTTP 200 | Неверный параметр, например, URL вместо домена | Нет | Проверьте ввод; отправляйте example.com, а не https://example.com/page |
| Тайм-аут или сброс соединения | Сбой сети или провайдера | Да, 3–4 раза | Увеличивайте задержку: 1, 2, 4, 8 секунд с джиттером |
| Пустой результат для нового сайта | Еще не в индексе; обновление раз в месяц | Нет | Покажите сообщение «еще не проиндексирован» с датой обновления индекса |
| Число отличается от другого инструмента | Разный индекс и другая формула DR | Нет | Сравнивайте тренды внутри одного инструмента, см. справочник DR |
| Строки обрываются на 50 000 | Лимит пагинации | Нет | См. примечания по пагинации |
| Баланс тратится быстрее, чем планировалось | Платное действие в цикле или вызов за 3 кредита на горячем пути | н/д | Логируйте _credits, разрешите только проверенные действия |
Прежде чем винить свой код, вставьте проблемный URL в cURL с тем же ключом. Если там работает, проблема в вашем клиенте. Если там тоже ошибка, ответ в таблице. Этот метод решил больше тикетов, чем любой поиск по логам.
Последовательность отладки
- 1
Воспроизведение через curl
Возьмите проблемный URL из вашего приложения и запустите его вручную с тем же ключом. Если curl работает, проблема в вашем коде.
- 2
Попробуйте бесплатное действие
overviewдля того же домена не требует ключа. Если ответ приходит, индекс в порядке, и проблема в аутентификации или кредитах. - 3
Проверьте баланс
402 однозначен, но платный вызов, следующий за успешным бесплатным, обычно указывает на проблему с кредитами или опечатку в ключе.
- 4
Проверьте ввод
Строчные буквы, без схемы, без пути, без точки в конце. Большинство ошибок
okвозникают здесь.

Нормализуйте домен перед вызовом
Большинство сбоев начинается с поля ввода, а не с сети. Пользователи вставляют то, что скопировали, и ваш код должен превратить это в чистый домен до того, как API его увидит.
Удалите схему и путь
Удалите схему, любой путь и строку запроса. Вставленный адрес статьи превращается в его хост, и только хост отправляется на сервер.
Приведите хост к нижнему регистру. Держите очистку в одной функции, чтобы одно и то же правило применялось в форме, в пакетной задаче и в тестах.
Протестируйте очистку на пяти-шести реальных вставках, включая одну с конечным слэшем и одну со строкой запроса. Эти случаи выявляют ошибки, которые не показывает чистый пример.
Один раз решите, что делать с www.
Выберите одно правило для www. и применяйте его в одной функции, чтобы один и тот же сайт никогда не искался под двумя разными написаниями.
Запишите правило рядом с функцией. Следующий разработчик, который столкнется с лишний www, найдет решение, а не второе мнение.
Какое бы правило вы ни выбрали, держите его в одном файле и напишите для него один тест. Тест — это запись решения, и он короткий.
Отклоняйте то, что не может быть доменом
Отклоняйте ввод с пробелами или пустыми метками и показывайте короткое сообщение в форме. Отклоненная строка ничего не стоит, а плохая стоит неудачного вызова и запутанного пользователя.
Конечные точки — это особый случай. Удаляйте одну точку в конце хоста и считайте все остальное недействительным.
Показывайте отклонение рядом с полем, а не как всплывающее уведомление, которое исчезает. Пользователь, который видит, что не так, исправит это с первой попытки.
Никогда не выводите сырую ошибку провайдера в интерфейс. Маппируйте 401 и 402 на общее «сервис недоступен» и отправляйте детали в свой лог и оповещение. Посетители не могут пополнить ваш баланс, и сообщение делает ваш инструмент сломанным.

Пустые результаты и возраст индекса
Когда кто-то вводит check my backlink в вашу форму и получает ничего, пустой ответ не всегда ошибка. Часто это означает, что домен новый, слишком маленький или просто еще не в индексе, и экран должен это указывать.
Совершенно новый сайт
Сайт, запущенный на прошлой неделе, может не иметь ссылающихся доменов в индексе. Покажите «еще не проиндексирован» вместе с датой индекса и предложите бесплатный вызов overview для перекрестной проверки.
Не кэшируйте этот пустой ответ надолго. Нескольких часов достаточно, и следующее обновление может добавить сайт в индекс.
Сообщите посетителю, когда индекс был обновлен в последний раз, простыми словами. Дата рядом с пустым результатом объясняет разрыв лучше, чем длинное сообщение.
Здесь достаточно однострочной заметки в вашем интерфейсе. Никто не ожидает живой индекс, и простое предложение рядом с датой индекса читается как честность.
Число, которое расходится с другим инструментом
Разные краулеры видят разные срезы веба. Считайте показатель DR как позицию внутри одного инструмента и укажите читателям на справочник DR для формулы.
Короткая заметка под цифрой сэкономит больше времени поддержки, чем любое количество извинений事后.
Если два показания отличаются, сначала сравните количество ссылающихся доменов. Формула DR проста, поэтому большинство расхождений сводится к количеству.
Строки, обрывающиеся на 50 000
Когда список обрывается на лимите, ответ корректен для того, что позволяет API. Подпишите обрезание и дайте ссылку на примечания по пагинации, вместо того чтобы пытаться получить глубже.
Глубокие страницы после этой точки — это не повторная попытка. Это другой запрос, и именно так цикл может работать часами.
Держите отметку об обрезании видимой и в экспорте, чтобы таблица, открытая месяц спустя, все еще показывала, что список был ограничен.
Показ количества строк рядом с таблицей превращает обрезание в видимый факт. Читатель, который видит 50 000 строк, знает, что нужно задать более узкий вопрос.
Перед отправкой кода повторных попыток
- 401 и 402 никогда не повторяются
- Тайм-ауты повторяются с экспоненциальной задержкой и фиксированным количеством попыток
- Каждый ответ проверяется на
ok, независимо от HTTP-статуса - Ввод нормализуется перед вызовом, а не после его сбоя
- Ошибки провайдера идут в ваш лог, а посетители видят общее сообщение
- Пустой результат показывает дату индекса вместо пустого экрана
Связанные вопросы
- Могут ли мои пользователи вводить любой URL в поле?
- Позвольте им, затем нормализуйте его самостоятельно. Удалите схему, путь, строку запроса и
www., если вы решили это делать, приведите хост к нижнему регистру и только затем вызывайте API. Провайдер ожидает чистый домен, поэтому неочищенный ввод — самая частая причина сбоя вызова. - Стоит ли кэшировать ошибки?
- Кэшируйте пустой результат «не проиндексирован» на несколько часов, так как индекс обновляется раз в месяц. Никогда не кэшируйте 401 или 402 надолго. Они исправляются сразу же, как ключ или баланс будут исправлены, и закэшированная ошибка скроет это исправление.
- Считаются ли бесплатные действия?
- Они не стоят кредитов. Четыре бесплатных действия:
domain,overview,statsиsuggest. Все равно кэшируйте их, так как вежливость ничего не стоит и поддерживает низкую задержку вашего сервиса.