Перейти к содержимому
CranSEO
CranSEOЗарегистрироваться

DataForSEO против API только для ссылок: что меняется в вашем конвейере R

Разбор одного воображаемого конвейера шаг за шагом. Мы перечисляем, что меняется, что остается, и что вы теряете, сужая источник до ссылок.

Исследовательская команда CranSEO ·

Два расходящихся железнодорожных пути в туманном лесу, представляющие выбор конвейера

Конвейер по этапам

01

Аутентификация

Наш ключ передается как параметр запроса или заголовок Authorization Bearer. Для бесплатных действий ключ не нужен, поэтому первые ячейки ноутбука могут выполняться любым пользователем.

02

Запрос

Один GET на действие, с q для домена. Пагинация использует page и per (от 10 до 5000), сортировка использует sort и order.

03

Парсинг

Каждый ответ — это JSON с полем ok. Аутентифицированные ответы добавляют _credits, показывающие стоимость и оставшийся баланс.

04

Хранение

Записывайте тибл и дату снимка вместе. График обновляется примерно раз в месяц, поэтому дата является частью данных.

05

Отчет

Рендеринг из сохраненного файла, а не из живого вызова, поэтому документ quarto даст ту же диаграмму и завтра.

Что вы получаете и что теряете

ВопросAPI только для ссылокБолее широкий провайдер
Область примененияБэклинки, реферальные домены, якоря, топ страницы, DRОбычно добавляет данные SERP и ключевых слов
БиллингЗа вызов, 1 кредит = $0.0001, без подпискиПроверьте свой собственный прайс-лист
СвежестьПримерно ежемесячное обновлениеПроверьте свою собственную документацию
Строк за вызовДо 1,000, оплачивается один разЗависит от конечной точки
Сигналы сбоевHTTP 401 неверный ключ, HTTP 402 нет кредитаРазлично
Кран, легко поднимающий стальную балку, по сравнению с маленьким инструментом, борющимся за показ эффективности

Ошибка, которая обходится дороже всего в таком конвейере

Большинство конвейеров терпят неудачу из-за денег, а не кода. Цикл, который вызывает конечную точку один раз для каждой строки, превращает дешевую задачу в дорогую.

С нами вызов стоит одинаково для 10 строк или 1,000, поэтому правило меняется: запрашивайте максимальную страницу, которую можете использовать. Установите per в 1000, сортируйте по тому, что вам нужно, и прекращайте пагинацию, когда вопрос исчерпан.

Глубокая пагинация ограничена 50,000 строками, что является функцией для аналитиков, которые склонны выгружать все данные. Если у домена больше ссылок, чем это, вам, вероятно, лучше использовать toppages или anchors.

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

Вердикт по этому разбору

Сужайте источник, только если отчет узкий

Если большинство столбцов в вашем тибле — это ссылки, API только для ссылок устраняет код парсинга и стоимость. Если половина столбцов — это данные SERP, оставьте текущего провайдера и добавьте наш для остального.

  • Сохраните демонстрационные ячейки для бесплатных действий
  • Закрепите дату снимка в выводе
  • Ожидайте ежемесячный ритм, а не ежедневный

Вопросы из разбора

Нужно ли мне переписывать весь конвейер?

Нет. Замените только этап ссылок. Оставьте этапы SERP и ключевых слов там, где они есть, запишите тибл ссылок в отдельный файл и объедините их на downstream по столбцу домена.

Открыт ли CORS для браузерных ноутбуков?

Да. CORS открыт, поэтому приложение Shiny или ячейка Observable могут напрямую вызывать бесплатные действия. Храните платные ключи на стороне сервера, потому что все, что находится в коде браузера, может быть прочитано посетителями.

Как дешево протестировать обработку ошибок?

Отправьте намеренно неверный ключ, чтобы увидеть HTTP 401, не потратив ничего. Случай HTTP 402 появляется только при пустом балансе, поэтому смоделируйте его в тестах, а не сливайте кредиты.

Совпадут ли итоги с другим провайдером точно?

Нет. Каждый провайдер краулит по-разному и обновляется по своему расписанию. Сравнивайте порядки величин и тренды и относитесь к DR здесь как к отдельной метрике с логарифмической шкалой.

Ошибки, повторные попытки и сбои, которые можно спланировать

Сбои — это то место, где конвейер только для ссылок и более широкий конвейер выглядят наиболее похоже. Код там часто остается незавершенным. Включите пути сбоев в сравнение, потому что решение dataforseo vs link-only выглядит иначе, когда ошибки на столе.

HTTP 401 и HTTP 402 — два кода, которые нужно обработать

Наиболее важны два кода статуса. HTTP 401 означает, что ключ отсутствует или неверен, и исправление находится в вашей конфигурации, а не в данных. HTTP 402 означает, что кредитный баланс исчерпан, и исправление — это пополнение со страницы аккаунта, а не изменение кода.

Запишите оба как явные ветви. Общий перехват, который поглощает статус и записывает пустую таблицу, — это то, как происходит тихое частичное извлечение.

Тайм-ауты и частичные файлы

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

Записывайте во временный файл и переименовывайте при успехе. Половина файла, который выглядит полным, — худший результат прерванного выполнения, потому что никто не думает его оспаривать.

Повторные попытки и темп

На этой странице не указана цифра запросов в секунду, поэтому размер конвейера определяется вызовами за цикл. Это число, которое определяет стоимость, и которое вы контролируете.

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

Где находится ключ во время тестов

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

Задайте тот же вопрос каждому конвейеру, к которому вы прикасаетесь: кто может прочитать ключ и где он записан? Ключ, появившийся в файле журнала, — это утечка, даже если сам ноутбук приватный.

Логирование стоимости каждого вызова

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

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

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

Деревянная головоломка-пазл с недостающими деталями на верстаке, представляющая потерю данных

Подсчет строк на этапах

Многие дорогие ошибки конвейера — это ошибки подсчета. Таблица теряет строки при объединении, фильтрации или удалении дубликатов, и диаграмма все равно выглядит правдоподобно.

Записывайте подсчет при каждой передаче

Думайте о конвейере как о цепи таблиц: ответ API, распарсенный тибл, сохраненный файл и отчет. Подсчет строк при каждой передаче показывает, какой этап потерял строки, если вообще потерял.

Аналитики часто считают только в конце. К тому времени причина находится на три этапа назад, а тибл уже был изменен дважды.

Одна строка на домен, одна строка на ссылку

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

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

Пагинация и потолок в 50,000 строк

Пагинация с page и per работает до 5000 строк на страницу, но глубокая пагинация останавливается на 50,000 строках. Запрос, ожидающий больше этого, возвращается с ограничением, и его подсчет может выглядеть подозрительно округлым.

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

Рабочий подсчет, гипотетически

Предположим, гипотетический запрос запрашивает ссылающиеся сайты для 30 целевых доменов и возвращает 30 строк подсчетов. Объединенный с оценками, таблица сохраняет 27 строк. Три пропавшие строки требуют проверки перед построением любой диаграммы, начиная с их ключей.

Запишите эти три по имени, а не только как подсчет. Подсчет говорит о том, что строки пропали, а имена говорят о том, какие ключи нужно очистить.

Объединения, которые тихо отбрасывают строки

Левое объединение сохраняет каждую строку левой таблицы, поэтому отсутствующая оценка появляется как NA, а не как исчезнувшая строка. Внутреннее объединение скрывает ту же проблему, полностью удаляя строку.

Выбирайте тип объединения намеренно и считайте NA-оценки после объединения. Этот подсчет должен быть в журнале рядом с полем credits.

Краткий план тестирования перед переключением

Запустите оба источника за один цикл. Те же домены, тот же день.

Возьмите 30 доменов, которые вы хорошо знаете, вытяните подсчеты реферальных доменов у вашего текущего провайдера и у CranSEO и постройте их друг против друга на логарифмических осях. Вы должны увидеть грубую диагональ, а не точную, потому что краулеры различаются, а наш обновляется примерно раз в месяц; DataForSEO, Ahrefs и Semrush видят немного разный веб.

Читайте выбросы, а не среднее. Там, где наш подсчет значительно ниже, проверьте, является ли домен новым или недавно переехавшим. Там, где он значительно выше, проверьте поддомены. Глоссарий определяет, что мы считаем реферальным доменом, а руководство по запуску показывает, как хранить оба запроса бок о бок.

Перед первым производственным запуском

  • Ключ читается из окружения, и тест покрывает отсутствующий ключ
  • Один тестовый вызов на одном домене, записанный с его полем credits
  • Явные ветви для HTTP 401 и HTTP 402
  • Подсчет строк, записанный на каждом этапе
  • Дата снимка, записанная рядом с каждым сохраненным файлом