Перейти до змісту
SEO Tools AI
SEO Tools AIЗареєструватися

Рецепт

Синхронізація показників посилань із таблицею або n8n

Більшість каталогів інструментів зберігаються в таблиці, базі Airtable або невеликій базі даних. Цей рецепт перетворює перевірку беклінків на заповнення стовпця: один запит на 2 000 рядків.

Дослідницька команда SEO Tools AI ·

Паперові робітники, що будують міст, що з’єднує шафу для документів із дорогою

Рецепт у п’яти кроках

01

Експорт доменів

Візьміть стовпець із вебсайтами ваших записів, видаліть протокол і шляхи, а також усуньте дублікати. Дублікати не коштують додатково, але ускладнюють етап мапінгу.

02

Розбиття на групи по 2 000

bulk_dr приймає до 2 000 доменів за один виклик. Таблицю на 5 000 рядків тому потрібно обробити трьома запитами.

03

Відправити, перевірити статус

Викличте API, прочитайте JSON і зупиніться, якщо ok має значення false. Логування _credits дозволить бачити баланс після кожного запуску.

04

Записати назад із датою

Зберігайте рейтинг і поточну дату в двох стовпцях. Ніколи не перезаписуйте хороше значення порожнім.

05

Запланувати один раз на місяць

Запускайте його першого числа місяця. Індекс оновлюється приблизно щомісяця, тому частіший запуск не дасть додаткових переваг.

Оберіть тригер запуску завдання

Тригер визначає частоту викликів, тому обирайте його перед створенням мапінгу. Два варіанти запуску покривають майже всі сценарії каталогів.

Розклад на перше число місяця — найпростіший варіант. Він відповідає ритму оновлення індексу, і нікому не потрібно пам’ятати про кнопку запуску.

Розклад для щомісячного оновлення

Поставте тригер розкладу на початок, встановіть його на перше число кожного місяця та дозвольте йому читати всю таблицю записів. Кожен запуск створює один пакет викликів bulk_dr, розмір якого відповідає кількості рядків.

Зберігайте розклад навіть для невеликих таблиць. Щомісячне завдання, що виконується на маленькій таблиці, коштує один кредит і підтримує актуальність дат рейтингів.

Тригер на кожний новий рядок

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

Якщо вам потрібен швидкий результат, дозвольте потоку нового рядка записати порожнє значення dr, а щомісячному запуску — заповнити його. Рядок отримає число без виклику для кожного нового запису.

Якщо записи надходять групами, об’єднайте нові рядки в один пакет в кінці тижня. Це коштуватиме один виклик, і таблиця більше не змінюватиметься лише раз на місяць.

Дата, що позначає готові рядки

Зберігайте dr_checked_on на кожному рядку, який ви оцінюєте. Запуск, що починається з фільтра за цією датою, пропускає вже оброблені дані за місяць, і окчергова черга не потрібна.

Коли запуск зупиняється посередині, рядки, які вже позначені, залишаються позначеними. Наступний запуск продовжує там, де закінчився попередній, що є найдешевшим способом відновлення.

Перед автоматизацією всього

Спочатку виконайте перевірку вручну на п’яти записах. Використовуйте безкоштовну дію overview для кожного з них, яка не вимагає ключа, і порівняйте те, що ви бачите, із тим, що очікували.

Це допоможе виявити типові несподіванки заздалегідь: запис, що веде на піддомен, продукт, який розміщено на шляху більшого сайту, домен, який перенаправив минулої весни. Рейтинг належить домену, а не продукту.

Вирішіть, як ваша таблиця позначає такі випадки, наприклад, за допомогою стовпця з приміткою, який містить текст shares domain. Читачі набагато легше сприймають примітку, ніж рейтинг, який виглядає неправильно.

Коли п’ять записів виглядають коректно, переходьте до пакетної обробки. Ваш посилання на поля перелічує стовпці, а приклад вартості показує, скільки коштує запуск.

Невелика версія на Python

Потрібний пакет requests. Це ескіз структури завдання: спочатку виведіть реальну відповідь, потім зіставте потрібні поля з вашими власними стовпцями.

python
import csv, requests

KEY = "sk_live_..."
BASE = "https://seotoolsai.org/api.php"

rows = list(csv.DictReader(open("listings.csv")))
domains = sorted({r["domain"] for r in rows})

for i in range(0, len(domains), 2000):
    chunk = domains[i:i + 2000]
    r = requests.post(BASE, params={"action": "bulk_dr", "key": KEY},
                      data={"domains": ",".join(chunk)}, timeout=60)
    if r.status_code in (401, 402):
        raise SystemExit(f"stop: HTTP {r.status_code}")
    data = r.json()
    if not data.get("ok"):
        raise SystemExit("api said not ok")
    print(data["_credits"])   # cost and remaining balance
    open(f"raw_{i}.json", "w").write(r.text)
Паперові шестерні та конвеєри, що сортують блоки на групи

Виконання в Google Таблицях або n8n

Таблиці можуть викликати URL через Apps Script за допомогою UrlFetchApp, а n8n має вузол HTTP Request. Обидва варіанти виконують ту саму функцію, що й наведений вище скрипт.

В n8n поставте тригер розкладу на початок, потім вузол, який читає вашу таблицю або базу даних, потім крок розбиття елементів, що формує групи по 2 000, а потім HTTP Request. Додайте фінальний вузол для запису рейтингу та дати назад.

Зберігайте ключ у сховищі облікових даних платформи, а не в тексті робочого процесу. Робочі процеси часто діляться, копіюються та вставляються на форумах, а ключ, вставлений разом із ними, — це витрачені гроші.

Без коду або скрипт: який варіант підходить вашій команді

Обидва варіанти виконують один і той самий запит. Різниця полягає в тому, хто буде підтримувати процес через рік і наскільки легко буде пояснити його цій людині.

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

Процес, який ви можете пояснити наступному редактору

Короткий потік n8n із чотирма позначеними вузлами легко передати: тригер, читання, пакет, запис назад. Називайте кожен вузол за його функцією, а не за стандартною міткою.

Уникайте накопичення багатьох гілок для крайніх випадків. Кожна гілка — це ще одне місце, де домен може отримати неправильний рейтинг.

Коли скрипт виправдовує своє існування

Скрипт має сенс, коли вхідними даними є папка з CSV-файлами або коли завдання вимагає логіки, яку потік обробляє незручно. Наведений вище ескіз підходить для такого випадку.

Помістіть скрипт у систему контролю версій і зберігайте ключ у змінній середовища. Скрипт, який читає ключ із файлу в тій самій папці, — це витоку, що чекає на спільний диск.

Посібники, які пропускають складну частину

Багато відео показують потік, який працює з першого разу на трьох рядках. Реальні записи містять порожні значення, дублікати та незвичайні домени, і саме там потік потребує уваги.

Спочатку створіть потік на своїх п’яти тестових рядках. Якщо посібник не витримує таких тестів, він ніколи не був повним завданням.

Коли ви передаєте потік іншій людині, включіть п’ять тестових рядків як зразок. Наступній людині буде легше зрозуміти, як виглядає правильний запуск, перш ніж торкатися реальних даних.

Що означають помилки

Поведінка API та те, що має робити завдання синхронізації.
СигналЗначенняЩо робить завдання
HTTP 401Відсутній або невірний ключЗупинити, сповістити людину
HTTP 402Кредити вичерпаноЗупинити, зберегти старі показники, поповнити
ok дорівнює falseЗапит не виконавсяЗаписати тіло відповіді, повторити спробу наступного запуску
Порожній результат для доменуНе в індексіЗалишити комірку порожньою
Паперовий садівник, що випрямляє зігнутий стебло рослини в саду

Зберігати аркуш чистим між запусками

Завдання синхронізації таке ж надійне, як і аркуш, до якого воно записує. Кілька звичок запобігають повільному накопиченню помилок між одним запуском і наступним.

Більшість проблем починається з невинного редагування: вставлено стовпець вище стовпця з показником або скопійовано рядок, який тихо змінив домен.

Зберігайте сирі відповіді в окремій вкладці

Зберігайте кожну сирі відповідь у власній вкладці або у форматі JSON Lines по одній відповіді на рядок. Ця копія дозволить відновити видимі стовпці без другого платного запиту.

Сира вкладка також відповідає на запитання, яке редактор ставить через півроку: що повернув API в ту дату.

Називайте кожну сирі вкладку за датою пакету, щоб копії сортувалися за хронологією, коли ви прокручуєте їх назад.

Зафіксуйте рядок заголовка

Зафіксуйте рядок заголовка і ніколи не вставляйте стовпець вище стовпця з показником. Маппінг, який вказує на стовпець F, читатиме неправильні дані після вставки, і це станеться без жодної помилки.

Називайте стовпці в маппінгу за іменем, а не за позицією. Ім'я переживе зміну порядку, а позиція — ні.

Підрахуйте рядки до і після

Запишіть кількість рядків у лог перед запуском і знову після нього. Дві цифри мають відрізнятися лише на рядки, які ви планували додати, а розрив повідомить про помилку.

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

Спочатку протестуйте на копії

Дублюйте аркуш і запустіть потік на копії, перш ніж торкатися оригіналу. Копія коштує нічого.

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

Видаліть копію лише після того, як другий запланований запуск підтвердить її. Два чистих запуски поспіль — кращий сигнал, ніж один.

Перед першим живим запуском

  • Ключ зберігається в сховищі облікових даних платформи або в змінній середовища, а не в тексті робочого процесу.
  • Один безкоштовний запит overview був перевірений вручну проти відомого вам списку.
  • Запуск був протестований на копії аркуша, і копія збіглася з очікуваннями.
  • Завдання записує дату поруч із кожним показником, до якого воно торкається.
  • Статуси 401 і 402 зупиняють завдання і надсилають повідомлення людині.

Питання щодо синхронізації

Як уникнути подвійної оплати, якщо завдання аварійно завершиться посередині?

Записуйте дату поруч із кожним показником під час виконання, а наступний запуск пропускайте рядки, вже позначені цим місяцем. Частина по 2000 рядків означає, що аварія коштує максимум один кредит, тому ризик мінімальний, але звичка тримає аркуш у порядку.

Чи може непрограміст налаштувати це?

Більшою мірою так. Нода HTTP Request у n8n або Make потребує лише URL, ключ і список. Складна частина — перетворення відповіді на стовпці, тому зробіть один тестовий запит і подивіться на JSON, перш ніж будувати маппінг.