Перейти до змісту
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 та ключових слів там, де вони є, запишіть тібл посилань у окремий файл і об’єднайте їх далі за стовпцем домену.

Чи відкритий 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 бачать трохи різний веб.

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

Перед першим виробничим запуском

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