Narzędzie do sprawdzania linków zwrotnych: skrypty, które można zaplanować
Każde wywołanie tutaj działa z curl lub dowolnym klientem HTTP. Zmień klucz, zachowaj wzorzec: wywołanie, zapis, różnica.
Zespół badawczy ArchiLinks ·

Podstawowe zasady
Jedno wywołanie, jedna faktura. Każde żądanie jest rozliczane raz niezależnie od liczby wierszy, a jedno wywołanie zwraca do 1 000 wierszy. Głęboka paginacja zatrzymuje się na 50 000 wierszach, a per przyjmuje wartości od 10 do 5 000.
To zmienia sposób pisania skryptów. Proś o per=1000 i paginuj tylko wtedy, gdy potrzebujesz więcej, ponieważ narzędzie do sprawdzania linków zwrotnych oparte na małych stronach mnoży Twój koszt dziesięciokrotnie bez żadnej korzyści. Błędy są jasne: HTTP 401 za brak klucza, 402 gdy brakuje kredytów, a każde ciało JSON zawiera ok.
Uruchom każdy skrypt ręcznie raz dla małej domeny i przeczytaj JSON. Nazwy pól, kontener wierszy i pola paginacji powinny pochodzić z rzeczywistej odpowiedzi, a nie z naszych przykładów, więc potwierdź je, zanim zadanie cron będzie od nich zależało.
Python: zapisz datowany snapshot
Nazwy pól w odpowiedzi są pokazane jako przykład. Wypisz jedną odpowiedź, zanim będziesz polegać na kluczu.
import json, sys, datetime, requests
BASE = "https://archilinks.com/api.php"
KEY = "sk_live_..."
def snapshot(domain, action="refdomains"):
r = requests.get(BASE, params={"action": action, "q": domain, "per": 1000, "key": KEY}, timeout=30)
if r.status_code in (401, 402):
sys.exit(f"API said {r.status_code}: check key or balance")
r.raise_for_status()
body = r.json()
assert body.get("ok"), body
name = f"{domain}-{action}-{datetime.date.today()}.json"
json.dump(body, open(name, "w"), indent=1)
print(name, body.get("_credits"))
snapshot(sys.argv[1])Node: ocena Domain Rating dla listy
bulk_dr przyjmuje do 2 000 domen za 1 kredyt na wywołanie, przez GET z parametrem domains lub przez ciało POST. Separator przecinka poniżej jest przykładem; przetestuj najpierw na dwóch domenach. Node 18 lub nowszy ma wbudowany fetch.
const domains = ["example.com", "example.org"];
const url = new URL("https://archilinks.com/api.php");
url.search = new URLSearchParams({
action: "bulk_dr",
domains: domains.join(","),
key: "sk_live_...",
});
const res = await fetch(url);
if (!res.ok) throw new Error(`HTTP ${res.status}`);
console.log(JSON.stringify(await res.json(), null, 2));Bash i jq: tygodniowa różnica
Zapisz snapshot z datą, a następnie porównaj dwa pliki. Zachowaj harmonogram cotygodniowy lub comiesięczny; indeks odświeża się około raz w miesiącu.
# crontab: 0 6 1 * * /opt/seo/pull.sh old-shop.com
curl -s "https://archilinks.com/api.php?action=refdomains&q=$1&per=1000&key=$KEY" \
| jq -S . > "snap-$1-$(date +%F).json"
# compare two dated files
diff <(jq -S . snap-old-shop.com-2026-09-01.json) <(jq -S . snap-old-shop.com-2026-10-01.json) | head -50Która akcja dla którego skryptu
| Skrypt | Akcja | Koszt za uruchomienie | Wyjście |
|---|---|---|---|
| Baza migracyjna | toppages, refdomains | 4 kredyty | Dwa pliki JSON |
| Czyszczenie outreachu | bulk_dr | 1 kredyt na wywołanie, do 2 000 domen | DR na potencjalnego klienta |
| Nakładanie się konkurencji | intersect | 2 kredyty | Strony linkujące do 2–10 domen |
| Obserwacja kotwic | anchors | 2 kredyty | Lista tekstu kotwicy |
| Sprawdzenie portfela | compare | 1 kredyt na wywołanie, do 20 domen | Wydajność obok siebie |

Obsługa krawędzi
Skrypty zawodzą na krawędziach. Zaplanuj to.
Zawiń każde wywołanie w retry, który czeka i rezygnuje po trzech próbach, z wyjątkiem 401 i 402, których retry nigdy nie naprawi. Loguj obiekt _credits z każdego uwierzytelnionego wywołania, więc spike wydatków pojawi się w logach zanim pojawi się na saldzie, i ogranicz pętle twardym maksimum liczbą stron.
Przechowuj snapshoty w git lub storage obiektowym z datą w nazwie pliku. Proste, nudne, skuteczne. Dla migracji, połącz te skrypty z przepisem na mapę przekierowań i checklistą migracji. Użytkownicy Google Sheets mogą wywoływać te same URL z Apps Script za pomocą UrlFetchApp, a arkusz z comiesięcznym triggerem jest idealnym monitorem.
Pytania o skrypty
Trzy pytania pojawiają się przed większością skryptów przed ich uruchomieniem, a każde ma krótką odpowiedź.
Jak sprawdzić, ile mam linków zwrotnych za darmo?
Wywołaj akcję overview lub stats bez klucza. Obie są darmowe i zwracają sumy z naszego własnego indeksu linków.
Dla list za sumami potrzebujesz klucza i 2 kredytów na wywołanie.
Co się stanie, gdy saldo się wyczerpie?
API zwraca HTTP 402. Twój skrypt powinien się zatrzymać i zalarmować, a nie retry w pętli. Doładuj z strony konta za pomocą USDT (TRC-20) i uruchom ponownie.
Czy mogę to wywołać z przeglądarki?
Tak. CORS jest otwarty. Nie umieszczaj jednak klucza w publicznym kodzie front-end, ponieważ każdy może go odczytać i wydać Twój kredyt.

Paginacja bez marnowania kredytów
Paginacja to miejsce, gdzie skrypty cicho kosztują więcej niż powinny. Każde żądanie strony to osobne wywołanie z osobną opłatą, więc pętla, która pyta o jedną stronę za dużo, płaci za nic.
Przeczytaj pola paginacji w jednej rzeczywistej odpowiedzi przed napisaniem pętli. Przykłady na tej stronie pokazują kształt, ale nazwy i sygnał zatrzymania pochodzą z żywego JSON.
Zatrzymaj się, gdy strona jest krótka
Strona z mniejszą liczbą wierszy niż prosiłeś, to zwykle ostatnia. Pozwól pętli się zatrzymać tam, zamiast prosić o dodatkową stronę dla pewności.
Jeśli odpowiedź zawiera pole total lub next-page, użyj tego jako sygnału zatrzymania. Policz wiersze, które zapisałeś, przeciwko niemu, więc niedopasowanie pojawi się w logach.
Ogranicz każdą pętlę
Ustaw twarde maksimum na strony w każdej pętli. Limit chroni Twoje saldo, jeśli nazwa pola się zmieni i skrypt będzie prosił o tę samą stronę.
Wybierz limit z rozmiaru, którego się spodziewasz, a następnie podnieś go świadomie, gdy rzeczywista domena potrzebuje więcej stron.
Pisz każdą stronę, gdy przybywa
Zapisz każdą stronę na dysku, gdy tylko przybędzie, z numerem strony w nazwie pliku. Skrypt, który zatrzyma się na stronie czterdziestej, może wznowić się od ostatniego zapisanego pliku, zamiast zaczynać od nowa i płacić dwa razy.
Trzymaj pliki w jednym folderze na domenę i datę, więc ponowne uruchomienie nigdy nie miesza dwóch pobierań.
Uruchamianie skryptów w harmonogramie
Każdy harmonogram wystarczy. Co ma znaczenie, to to, że każde uruchomienie zostawia plik, a nieudane uruchomienie informuje kogoś.
Wybór hosta do zadania
Cron pasuje do serwera z dyskiem, którym kontrolujesz. Zadanie CI pasuje do repozytorium, które już przechowuje snapshoty, więc historia żyje obok kodu, który ją czyta.
Bez względu na to, co wybierzesz, trzymaj listę domen w pliku, więc dodanie domeny to edycja, a nie zmiana skryptu.
Alerty na porażkę, nie na każdy sukces
Alerty, gdy skrypt zawiedzie, lub gdy saldo spadnie poniżej wybranego poziomu. Wiadomość o sukcesie każdego ranka uczy ludzi ignorować kanał, który niesie prawdziwy problem.
Loguj obiekt _credits z każdego uruchomienia, jak robi to przykład Pythona, i przeglądaj trend raz w miesiącu.
Tygodniowa różnica w pięciu krokach
Wybierz akcje
Wybierz dwa lub trzy wywołania, które odpowiadają na Twoje pytanie. Każde kosztuje kredyty, więc zapisz koszt obok.
Zapisz surową odpowiedź
Przechowuj JSON dokładnie tak, jak przybył, z domeną i datą w nazwie pliku. Formatowanie może poczekać do kroku różnicy.
Sortuj klucze przed porównaniem
Użyj jq -S lub odpowiednika, więc kolejność kluczy nie pojawi się jako zmiana. Powyższy przykład basha to robi.
Porównaj listy, nie pliki
Połącz dwie odpowiedzi na URL lub domenę, a następnie raportuj, co zostało dodane, usunięte i zmienione. Surowa różnica tekstowa długiego pliku jest trudna do wykorzystania.
Przejrzyj różnicę i działaj
Wyślij usunięte domeny linkujące do osoby odpowiedzialnej za outreach, a usunięte strony do osoby odpowiedzialnej za przekierowania.
Testowanie skryptu przed zależnością zadania cron
Skrypt, który działa bez nadzoru, powinien najpierw się udowodnić. Użyj jednej małej domeny, przeczytaj pełny JSON, a dopiero potem poszerz listę.
Szybki test zdroworozsądkowy to porównanie sum z darmowym wywołaniem overview dla tej samej domeny. Liczby nie muszą dokładnie pasować do płatnej listy, ale powinny zgadzać się w skali.
Uruchom z dwiema domenami
Dwie domeny testują pętlę, nazwy plików i ścieżki błędów. Jedna domena może przejść przez szczęście, podczas gdy dwie pokazują, czy pętla resetuje się między domenami.
Użyj jednej domeny, którą dobrze znasz, i jednej, której nie znasz, więc możesz ocenić, czy wyjście wygląda poprawnie.
Trzymaj klucz z dala od logów i zgłoszeń
Skrypty często drukują pełny adres żądania, a klucz siedzi w tym adresie jako parametr. Usuń klucz z każdej linii, która opuszcza serwer, lub wyślij go w nagłówku Authorization, co trzyma go z dala od adresu.
Jeśli klucz pojawi się w zgłoszeniu lub publicznym repozytorium, zatrzymaj zadanie harmonogramu, które go używa, przed następnym uruchomieniem.
Trzymaj krótką notatkę, gdzie znajduje się klucz, które skrypty go czytają i które hosty wywołują. Ta notatka jest tym, czego potrzebujesz, gdy ktoś zapyta, kto może wydać saldo.
Wybór akcji dla każdego pytania
Zacznij od pytania, nie od listy endpointów. Migracja musi wiedzieć, które URL niosą linki, podczas gdy lista outreach potrzebuje ocen domen. Jeden host, dwa pytania. Każde kosztuje inną liczbę kredytów.
Napisz koszt obok pytania przed napisaniem jakiegokolwiek kodu. Skrypt, który działa cotygodniowo, mnoży małą cenę przez pięćdziesiąt dwa, a to mnożenie jest łatwe do zapomnienia, dopóki saldo tego nie pokaże.
Retry, które zatrzymują się, gdy powinny
Retry żądania, które zawiodło z powodu tymczasowego powodu, takiego jak timeout lub błąd serwera, kilka razy z rosnącą pauzą między próbami. Nie retry 401 lub 402, ponieważ czekanie nie zmieni żadnej odpowiedzi.
Loguj każde retry z akcją i domeną, więc wzorzec błędów pojawi się jako wzorzec, a nie jako cisza.
Ustaw liczbę retry w jednym miejscu, więc każde wywołanie w skrypcie podąża za tą samą regułą. Rozproszone pętle retry mają tendencję do niezgody ze sobą, a ta niezgoda jest trudna do znalezienia w logach.