Ворота перед публикацией: блокировать, приостанавливать или пропускать
Один пакетный запрос к хостам, на которые ссылается черновик, а затем четырехэтапное дерево решений. Дерево определяет, публикуется ли пост, ждет проверки человеком или останавливается.
Исследовательская команда SEOBlogBot ·
Примечание по наименованию
Люди вводят «a href backlink checker», когда имеют в виду Ahrefs. Ворота ниже работают с любым источником оценки домена, и здесь мы используем собственное действие bulk_dr. Реальные инструменты в этой сфере включают Ahrefs, Semrush и Moz; Google Search Console показывает только ваши собственные ссылки.
На что смотрят ворота
Ворота анализируют только исходящие ссылки. Они не смотрят на рейтинги, трафик или данные Search Console и никогда не требуют ваших аналитических данных.
Скрипт извлекает все <a href> из сгенерированного HTML и сводит каждый URL к его хосту. Он удаляет дубликаты и отправляет список в bulk_dr одним запросом. Ничего лишнего не покидает ваш билд. Это один кредит на до 2000 хостов, поэтому даже пост с шестьюдесятью ссылками стоит доли цента.
Запускайте его на сгенерированном HTML, а не на Markdown. Шорткоды, встраивания и плагины добавляют ссылки, которые вы никогда не вводили вручную. Проверяйте то, что видят посетители.
Где запускаются ворота
Размещайте ворота как можно позже. Лучшее место — последний шаг билда перед планировщиком, после того как CMS или генератор статических страниц создал финальный HTML. Один пакетный запрос везде одинаковый.
WordPress
Привяжите изменение статуса к событию «Запланировано» и запускайте ворота внутри этого хука. Пост должен оставаться в статусе «Запланировано» только после того, как вердикт будет «PASS». Один хук, одно правило.
Hugo
Добавьте шаг после hugo build, который считывает сгенерированный HTML из папки public. Отправьте список хостов в пакетный запрос перед запуском шага развертывания.
Ghost
Подпишите вебхук на событие post-scheduled. Обработчик извлекает ссылки из HTML поста и выполняет тот же запрос, так что Ghost и статические сайты используют одно правило.
Дерево решений: по одному вопросу за раз
01
Возвращается ли какой-либо хост с рейтингом 0 или без строки?
Ноль означает, что наш индекс не содержит ссылающихся доменов для него. Это нормально для нового сайта и является предупреждением для любого источника, на который вы ссылаетесь как на авторитет. Переходите к вопросу 2.
02
Является ли хост с нулевым рейтингом источником, который вы упомянули в тексте?
Если пост называет его исследованием, отчетом или официальной страницей, ПРИОСТАНОВИТЕ пост и отправьте его редактору. Если это инструмент сносок или упоминание бренда, ПРОПУСТИТЕ.
03
Находятся ли три или более хостов ниже вашего порога?
Выберите порог из своей истории (см. раздел ниже). Три или более слабых хоста в одном посте обычно означают украденный список или вставленный черновик ИИ. ПРИОСТАНОВИТЕ.
04
Ссылается ли один и тот же хост более пяти раз?
Повторные ссылки на один внешний домен выглядят как аффилиативный паттерн. Сведите их к первому упоминанию. Если скрипт не может принять решение, ПРИОСТАНОВИТЕ.
Почему дерево задает вопросы в таком порядке
Вопросы идут от самого дешевого сигнала к самому требовательному к суждению. Каждый ответ сужает круг того, что должен решить следующий вопрос, поэтому человеку приходится проверять меньше черновиков.
Порядок также защищает время редактора. ПРИОСТАНОВКА с четкой причиной занимает минуту на действие, тогда как неясный флаг часто игнорируется к концу недели.
Сначала ноль, затем контекст
Ноль — самый дешевый сигнал, поэтому он идет первым. Сам по себе он мало что говорит. Следующий вопрос решает, имеет ли значение этот ноль, поэтому дерево никогда не блокирует пост только из-за нуля.
Представьте хост, который новый для индекса. Он получает ноль, и никто в команде о нем не слышал. Если пост лишь вскользь упоминает его, ответ — ПРОПУСТИТЬ.
Пороги перед подсчетом
Один слабый хост обычно — это шум. Несколько слабых хостов в одном черновике образуют паттерн, и именно для этого нужен порог. Установите порог на основе вашей истории перед тем, как что-либо считать, чтобы подсчет имел смысл.
Повторения — в конце
Повторные ссылки на один хост — это вопрос стиля, а не качества. Задавайте его последним, после того как будут проверены вопросы качества. Подсчет повторений сам по себе редко должен определять судьбу поста.
Что делает каждый выход в конвейере
Коды выхода — это предложение; сопоставьте их со своей CI.
Выход
Значение
Действие в конвейере
Кто проверяет
PASS
Ни одно правило не сработало
Пост переходит в планировщик
Никто
HOLD
Сработало одно мягкое правило
Статус установлен в «Ожидает проверки», сообщение в Slack со списком хостов
Редактор
BLOCK
Ошибка API 401/402 или некорректный список
Задача завершается с ошибкой, пост остается черновиком
Тот, кто владеет конвейером
Что должен видеть редактор при ПРИОСТАНОВКЕ
Заголовок поста и слот, который он должен был занять в расписании.
Каждый отмеченный хост с его рейтингом и сработавшим правилом.
Предложение, в котором появляется хост, чтобы никто не искал по всему черновику.
Однострочное объяснение, когда скрипт не смог принять решение.
Ясный способ выпустить пост или вернуть его автору.
Выбор порога без заимствования чужого
Начните со своей истории. Возьмите тридцать опубликованных постов, которые вам нравятся, и пропустите их исходящие хосты через bulk_dr один раз. Отсортируйте рейтинги, затем посмотрите на десятый процентиль.
Этот процентиль — разумный первый порог, потому что он выделяет самый слабый десятый процент того, что вы уже принимаете. Наш рейтинг — это логарифмическая шкала от 0 до 100, а Ahrefs DR и Moz DA остаются отдельными шкалами. Пороги форумов не переносятся.
Храните выборку из тридцати постов в своем репозитории с датой рядом, чтобы порог можно было пересчитать, когда изменится выборка.
Пересматривайте порог каждый квартал. Граф ссылок растет, а индекс обновляется примерно раз в месяц. Хост, который весной получил оценку 8, после обновления может иметь 15. В глоссарии объясняются термины, стоящие за этими числами.
Ворота за тридцать строк
Скетч на shell и jq. Замените на свой язык; структура остается прежней.
bash
HOSTS=$(grep -o 'href="https\?://[^/"]*' post.html | sed 's|.*//||' | sort -u | paste -sd, -)
RES=$(curl -s -H "Authorization: Bearer $SBB_KEY" \
"https://seoblogbot.com/api.php?action=bulk_dr&domains=$HOSTS")
case $(echo "$RES" | jq -r '.ok') in
true) ;;
*) echo "BLOCK: api error"; exit 2 ;;
esac
# inspect the response once and adapt the jq path to its shape
echo "$RES" | jq '.'
Когда запрос ворот завершается ошибкой
Не каждая ошибка — это вердикт по черновику. Сбой запроса — это проблема в задаче, и три случая HTTP ниже требуют трех разных реакций. Запишите эти реакции до запуска. Никто не должен импровизировать ночью.
401 — это проблема настройки
401 означает, что ключ отсутствует или неверен. Воспринимайте это как сломанную задачу, а не как суждение о посте. Пост остается в черновике, а владелец конвейера получает сообщение.
402 — это проблема бюджета
402 означает, что кредиты закончились, и повторная попытка не исправит это. Остановите задачу и оповестите человека. Пополните баланс на странице аккаунта, затем запустите сбойную партию снова.
Некорректный ответ — это баг
Если JSON не парсится или ok равно false, запишите сырой ответ в лог и остановитесь. Не гадайте относительно отсутствующих полей. Угаданный рейтинг может пропустить пост, который должен был быть приостановлен.
Логируйте каждый сбой с ID поста, статусом HTTP и временем, чтобы та же ошибка не повторялась молча.
Проверка результата, а не только запроса
Успешный ответ означает, что запрос сработал. Это не доказывает, что пост запланирован с правильным статусом. Прочитайте его обратно. После того как ворота установят статус Scheduled, подтвердите статус и время публикации перед тем, как задача будет считаться выполненной.
В противном случае ворота могут пройти «на бумаге», пока CMS тихо отменяет изменение. Запишите этот обратный запрос в ту же задачу. Эта проверка дешевая. Пусть она выдает громкую ошибку, если статус не совпадает.
Обратный запрос также показывает, какой шаг сместился. Если статус неверный, возможно, ворота сработали до финального билда. Узнайте об этом до следующего релиза.
Сохраняйте результат обратного запроса в логе рядом с вердиктом ворот. Вместе они показывают, согласовались ли ворота и CMS в определенный день.
Вопросы, которые задают команды перед добавлением ворот
Является ли инструмент проверки обратных ссылок a href тем же самым, что и эти ворота?
Нет. Люди вводят эту фразу, когда имеют в виду Ahrefs. Эти ворота — скрипт, который считывает данные о ссылках через API и запускается внутри вашего конвейера, а не во вкладке браузера.
Замедляют ли ворота публикацию?
Дополнительная стоимость — один сет-обратный запрос к API на черновик. Измерьте его в своей сети перед тем, как решить, что он слишком медленный, потому что ответ зависит от вашей настройки билда.
Как выбрать порог в первый день?
Используйте выборку из тридцати постов из раздела выше. Пока у вас ее нет, запускайте ворота в режиме только логирования, где они записывают вердикты, но не меняют статус.
Заменяют ли ворота редактора?
Нет. Они сортируют черновики на PASS, HOLD и BLOCK, чтобы редактор проверял меньше из них. Человек все еще решает, что означает HOLD для этого поста.
Могут ли ворота работать с черновиком, который не финальный?
Могут, но вердикт описывает только ссылки в тот момент. Запустите его снова на финальном HTML, потому что позднее редактирование может добавить или удалить ссылку.
Всегда ли ноль означает, что источник плохой?
Нет. Ноль означает, что наш индекс не содержит ссылающихся доменов для этого хоста. Это нормально для нового сайта, и это становится предупреждением только тогда, когда пост представляет этот хост как авторитет.
Наша позиция
Приостанавливайте больше, чем блокируйте
Ворота, которые слишком легко блокируют, отключают к третьему раздраженному редактору. Оставьте BLOCK для сломанной инфраструктуры, а срабатывания правил превращайте в HOLD с четкой причиной.
Логируйте список хостов с вердиктом, чтобы апелляции занимали минуту.