Przepis
Synchronizuj wyniki linków z arkusza lub n8n
Większość katalogów narzędzi działa na arkuszach, bazach Airtable lub małych bazach danych. Ten przepis zamienia sprawdzanie linków zwrotnych w wypełnianie kolumn: jedno zapytanie na 2000 wierszy.
Zespół badawczy SEO Tools AI ·

Przepis w pięciu krokach
Eksportuj domeny
Weź kolumnę z adresami stron z Twoich list, usuń protokół i ścieżki oraz usuń duplikaty. Duplikaty nie kosztują więcej, ale utrudniają krok mapowania.
Podziel na grupy po 2000
bulk_dr akceptuje do 2000 domen w jednym wywołaniu. Arkusz z 5000 wierszami wymaga więc trzech wywołań.
Wyślij, sprawdź ok
Wywołaj API, odczytaj JSON i zatrzymaj działanie, jeśli ok jest false. Zaloguj _credits, aby zobaczyć saldo po każdym uruchomieniu.
Zapisz z datą
Zapisz ocenę i dzisiejszą datę w dwóch kolumnach. Nigdy nie nadpisuj dobrej wartości pustą wartością.
Zaplanuj raz w miesiącu
Uruchom go pierwszego dnia miesiąca. Indeks zmienia się około raz w miesiącu, więc częstsze uruchamianie nie daje żadnych korzyści.
Wybierz, co uruchamia zadanie
Wyzwalacz decyduje o częstotliwości wywołań, więc wybierz go przed zbudowaniem mapowania. Dwa sposoby uruchomienia pokrywają niemal każdy katalog.
Harmonogram na pierwszy dzień miesiąca to najprostsza opcja. Pasuje do rytmu indeksu, a nikt nie musi pamiętać o wciśnięciu przycisku.
Harmonogram comiesięcznego odświeżania
Umieść na początku wyzwalacz harmonogramu, ustaw go na pierwszy dzień każdego miesiąca i pozwól mu odczytać całą tabelę listingu. Każde uruchomienie wykonuje wtedy jedną partię wywołań bulk_dr, dostosowaną do liczby wierszy.
Zachowaj harmonogram nawet przy małej tabeli. Comiesięczne zadanie uruchamiane na małym arkuszu kosztuje jeden kredyt i utrzymuje oceny aktualne i z datą.
Wyzwalacz przy każdym nowym wierszu
Załóżmy, że listingi pojawiają się po jednym, co kilka dni. Wyzwalacz uruchamiany przy każdym nowym wierszu jest kuszący, ale każde wywołanie jest rozliczane osobno, więc jedno wywołanie na wiersz kosztuje więcej niż jedna partia na miesiąc.
Jeśli chcesz uzyskać wynik szybko, pozwól przepływowi dla nowego wiersza zapisać puste dr, a comiesięczne uruchomienie wypełni je. Wiersz otrzyma wartość bez wywoływania zapytania przy każdym pojawieniu się nowego elementu.
Jeśli listingi pojawiają się partiami, zgrupuj nowe wiersze w jedną partię pod koniec tygodnia. To kosztuje jedno wywołanie, a arkusz nie zmienia się tylko raz w miesiącu.
Data oznaczająca zakończone wiersze
Zapisz dr_checked_on przy każdym wierszu, który oceniasz. Uruchomienie zaczynające się od filtrowania po tej dacie pomija to, co już zostało zrobione w tym miesiącu, i nie jest potrzebna osobna kolejka.
Gdy uruchomienie zatrzyma się w połowie, wiersze już oznaczone pozostają oznaczone. Następne uruchomienie kontynuuje tam, gdzie skończyło się poprzednie, co jest najtańszą formą odzyskiwania.
Zanim zaczniesz automatyzować
Wykonaj sprawdzenie ręcznie na pięciu listingach. Użyj darmowej akcji overview dla każdego, która nie wymaga klucza, i porównaj to, co widzisz, z tym, czego się spodziewałeś.
To wychwyci typowe niespodzianki z wyprzedzeniem: listing wskazujący na poddomenę, produkt znajdujący się na ścieżce większej witryny, domena, która przekierowała w zeszłym roku. Ocena należy do domeny, a nie do produktu.
Zdecyduj, jak Twój arkusz oznacza takie przypadki, na przykład za pomocą kolumny z notatką zawierającej tekst shares domain. Czytelnicy znacznie łatwiej wybaczą przypis niż ocenę, która wygląda na błędną.
Gdy pięć przykładów wygląda sensownie, przejdź do partii. Twoje odniesienie do pól wymienia kolumny, a przykład kosztów pokazuje, ile kosztuje jedno uruchomienie.
Mała wersja w Pythonie
Wymaga pakietu requests. To szkic kształtu zadania: najpierw wydrukuj prawdziwą odpowiedź, a następnie przemapuj potrzebne pola do własnych kolumn.
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)
Wykonanie w Google Sheets lub n8n
Sheets mogą wywołać URL z Apps Script za pomocą UrlFetchApp, a n8n ma węzeł HTTP Request. Oba wykonują to samo co powyższy skrypt.
W n8n umieść na początku wyzwalacz harmonogramu, następnie węzeł odczytujący Twój arkusz lub tabelę, następnie krok dzielenia elementów, który tworzy grupy po 2000, a następnie HTTP Request. Dodaj końcowy węzeł zapisujący ocenę i datę z powrotem.
Przechowuj klucz w magazynie poświadczeń platformy, a nie w tekście przepływu pracy. Przepływy są udostępniane, kopiowane i wklejane na forach, a klucz wklejony razem z nimi to wydane pieniądze.
Bez kodu lub skrypt: która forma pasuje do Twojego zespołu
Obie ścieżki wykonują to samo wywołanie. Różnica polega na tym, kto będzie musiał utrzymywać przepływ za rok i jak łatwo będzie go wyjaśnić tej osobie.
Wybierz formę, którą nadal będziesz w stanie przeczytać po kilku miesiącach przerwy. Sprytny przepływ, którego nikt nie rozumie, jest gorszy niż prosty skrypt, który każdy może śledzić.
Przepływ, który możesz wyjaśnić następnemu edytorowi
Krótki przepływ n8n z czterema oznaczonymi węzłami jest łatwy do przekazania: trigger, read, batch, write back. Nazwij każdy węzeł zgodnie z tym, co robi, a nie według domyślnej etykiety.
Unikaj nakładania wielu gałęzi na przypadki brzegowe. Każda gałąź to jedno miejsce więcej, w którym domena może otrzymać błędną ocenę.
Gdy skrypt zyskuje swoje miejsce
Skrypt ma sens, gdy wejściem jest folder plików CSV lub gdy zadanie wymaga logiki, którą przepływ obsługuje niezręcznie. Powyższy szkot pasuje do tego przypadku.
Umieść skrypt w systemie kontroli wersji i przechowuj klucz w zmiennej środowiskowej. Skrypt, który odczytuje klucz z pliku w tym samym folderze, to wyciek czekający na udostępniony dysk.
Samouczki pomijające trudną część
Wiele filmów pokazuje przepływ, który działa za pierwszym razem na trzech wierszach. Prawdziwe listingi mają puste miejsca, duplikaty i dziwne domeny, a to właśnie tam przepływ wymaga uwagi.
Zbuduj przepływ najpierw na swoich pięciu testowych wierszach. Jeśli samouczek nie przetrwa tych testów, nie był to cały proces.
Gdy przekazujesz przepływ komuś innemu, dołącz pięć testowych wierszy jako próbkę. Następna osoba zobaczy, jak wygląda poprawne uruchomienie, zanim dotknie danych produkcyjnych.
Co oznaczają błędy
| Sygnał | Znaczenie | Co robi zadanie |
|---|---|---|
| HTTP 401 | Brakujący lub błędny klucz | Zatrzymaj, powiadom człowieka |
| HTTP 402 | Kredyty się skończyły | Zatrzymaj, zachowaj stare oceny, doładuj |
ok jest false | Wywołanie się nie powiodło | Zaloguj treść, spróbuj ponownie przy następnym uruchomieniu |
| Pusty wynik dla domeny | Nie w indeksie | Zostaw komórkę pustą |

Utrzymuj czystość arkusza między uruchomieniami
Zadanie synchronizacji jest tak dobre, jak arkusz, do którego zapisuje. Kilka nawyków zapobiegnie powolnemu uszkodzeniu, które gromadzi się między jednym a drugim uruchomieniem.
Większość problemów zaczyna się od niewinnego edytowania: kolumna wstawiona powyżej oceny lub skopiowany wiersz, który cicho zmienia domenę.
Przechowuj surowe odpowiedzi w osobnej karcie
Przechowuj każdą surową odpowiedź w osobnej karcie lub jako JSON Lines z jedną odpowiedzią na linię. Ta kopia pozwala Ci odbudować widoczne kolumny bez drugiego płatnego wywołania.
Karta surowych danych odpowiada również na pytanie, które zadaje edytor sześć miesięcy później: co zwróciło API w tym dniu.
Nazwij każdą kartę surowych danych datą partii, aby kopie sortowały się w kolejności, gdy przewijasz je wstecz.
Zablokuj wiersz nagłówka
Zablokuj wiersz nagłówka i nigdy nie wstawiaj kolumny powyżej oceny. Mapowanie wskazujące na kolumnę F odczyta złe dane po wstawieniu, i zrobi to bez żadnego błędu.
Nazwij kolumny w mapowaniu, a nie według pozycji. Nazwa przetrwa przegrupowanie, a pozycja nie.
Policz wiersze przed i po
Zapisz liczbę wierszy w dzienniku przed uruchomieniem i ponownie po nim. Dwie liczby powinny różnić się tylko wierszami, które zamierzałeś dodać, a luka powie Ci, że coś poszło nie tak.
Posortuj arkusz według kolumny z oceną raz w miesiącu i spójrz na pierwsze i ostatnie wiersze. Dziadne wartości tam zwykle wskazują na domenę, która została przypisana do błędnego listingu.
Przetestuj na kopii najpierw
Zduplikuj arkusz i uruchom przepływ przeciwko kopii, zanim dotkniesz prawdziwego. Kopia nic nie kosztuje do stworzenia.
Złe mapowanie nadpisujące żywe oceny jest trudne do cofnięcia, ponieważ stare wartości zniknęły. Zachowaj kopię, aż pierwsze uczciwe uruchomienie zgodzi się z tym, czego się spodziewałeś.
Usuń kopię dopiero po drugim zaplanowanym uruchomieniu, które ją potwierdzi. Dwa czyste uruchomienia z rzędu to lepszy sygnał niż jedno.
Przed pierwszym uruchomieniem produkcyjnym
- Klucz znajduje się w magazynie poświadczeń platformy lub zmiennej środowiskowej, a nie w tekście przepływu pracy.
- Jedno darmowe wywołanie
overviewzostało sprawdzone ręcznie przeciwko listingu, który znasz. - Uruchomienie zostało przetestowane na kopii arkusza, a kopia zgodziła się z tym, czego się spodziewałeś.
- Zadanie zapisuje datę obok każdej oceny, której dotyka.
- Status 401 i 402 zatrzymują zadanie i wysyłają wiadomość do osoby.
Pytania dotyczące synchronizacji
Jak uniknąć podwójnej płatności, jeśli zadanie zawinie w połowie?
Zapisuj datę obok każdej oceny w miarę postępów, a następne uruchomienie pomija wiersze już oznaczone w tym miesiącu. Partie po 2000 oznaczają, że awaria kosztuje co najwyżej jeden kredyt, więc ryzyko jest znikome, ale nawyk utrzymuje porządek w arkuszu.
Czy osoba nieprogramistyczna może to skonfigurować?
W większości przypadków tak. Węzeł HTTP Request w n8n lub Make wymaga tylko URL, klucza i listy. Trudniejszą częścią jest zamiana odpowiedzi na kolumny, więc zrób jedno testowe wywołanie i spójrz na JSON przed zbudowaniem mapowania.