Verktyg för att kontrollera backlänkar till webbsidor: skript du kan schemalägga
Varje anrop här fungerar med curl eller vilken HTTP-klient som helst. Ersätt nyckeln, behåll mönstret: anropa, spara, jämför.
ArchiLinks forskningsgrupp ·

Grundläggande regler
Ett anrop, en faktura. Varje begäran debiteras en gång oavsett antal rader, och ett enda anrop returnerar upp till 1 000 rader. Djup paginering stoppar vid 50 000 rader, och per accepterar värden från 10 till 5 000.
Det ändrar hur du skriver skript. Be om per=1000 och paginera bara när du behöver mer, eftersom ett verktyg för att kontrollera backlänkar till webbsidor byggt på små sidor multiplicerar dina kostnader med tio utan vinst. Felmeddelandena är tydliga: HTTP 401 för en saknad nyckel, 402 när krediter är slut, och varje JSON-svar innehåller ok.
Kör varje skript en gång manuellt mot ett litet domännamn och läs JSON-svaret. Nyckelnamnen, radcontainern och pagineringsfälten bör komma från ett verkligt svar, inte från våra exempel, så bekräfta dem innan en cron-jobb beror på dem.
Python: spara en daterad ögonblicksbild
Fältnamn i svaret visas som exempel. Skriv ut ett svar innan du litar på en nyckel.
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: bulk Domain Rating för en lista
bulk_dr tar upp till 2 000 domäner för 1 kredit per anrop, via GET med en domains-parameter eller via POST-body. Kommatecknet nedan är ett exempel; testa med två domäner först. Node 18 eller senare har fetch inbyggt.
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 och jq: veckovis jämförelse
Spara en ögonblicksbild med datumet, jämför sedan två filer. Behåll cron-jobbet som veckovis eller månatlig; indexet uppdateras ungefär en gång i månaden.
# 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 -50Vilket anrop för vilket skript
| Skript | Åtgärd | Kostnad per körning | Utdata |
|---|---|---|---|
| Migreringsbaslinje | toppages, refdomains | 4 krediter | Två JSON-filer |
| Rensning av outreach | bulk_dr | 1 kredit per anrop, upp till 2 000 domäner | DR per prospekt |
| Konkurrentöverskattning | intersect | 2 krediter | Sidor som länkar till 2–10 domäner |
| Ankare-vakt | anchors | 2 krediter | Lista över ankartexter |
| Portföljkontroll | compare | 1 kredit per anrop, upp till 20 domäner | Sida-vid-sida-metrik |

Hantering av kanfall
Skript misslyckas i kanfallen. Planera för dem.
Kapsla varje anrop i en retry som väntar och ger upp efter tre försök, förutom 401 och 402, som en retry aldrig kommer att fixa. Logga _credits-objektet från varje autentiserat svar, så att en ökning av utgifterna syns i dina loggar innan den syns i ditt saldo, och begränsa loopar med ett hårt maxantal sidor.
Behåll ögonblicksbilder i git eller objektlagring med datumet i filnamnet. Enkelt, tråkigt, effektivt. För migrationer, para ihop dessa skript med redirect map recipe och migration checklist. Google Sheets-användare kan anropa samma URL:er från Apps Script med UrlFetchApp, och ett ark med en månatlig trigger är en perfekt monitor.
Frågor om skript
Tre frågor dyker upp innan de flesta skript går live, och varje fråga har ett kort svar.
Hur kontrollerar jag hur många backlänkar min webbplats har, gratis?
Anropa översikts- eller statistikåtgärden utan nyckel. Båda är gratis och returnerar totalerna från vårt eget länkindex.
För listorna bakom totalerna behöver du en nyckel och 2 krediter per anrop.
Vad händer när saldot tar slut?
API:et returnerar HTTP 402. Ditt skript ska stanna och varna, inte försöka igen i en loop. Ladda på från kontosidan med USDT (TRC-20) och kör om.
Kan jag anropa det från en webbläsare?
Ja. CORS är öppet. Lägg inte in en nyckel i offentlig front-end-kod, eftersom alla kan läsa den och spendera dina krediter.

Paginering utan att slösa krediter
Paginering är där skript tyst kostar mer än de borde. Varje sidbegäran är ett separat anrop med sin egen avgift, så en loop som ber om en sida för mycket betalar för ingenting.
Läs pagineringsfälten i ett verkligt svar innan du skriver loopen. Exemplen på denna webbplats visar formen, men namnen och stoppsignalen kommer från det levande JSON-svaret.
Stoppa när en sida kommer tillbaka kort
En sida med färre rader än du bad om är vanligtvis den sista. Låt loopen stanna där istället för att be om en extra sida för att vara säker.
Om svaret innehåller ett totalt värde eller ett nästa-sida-fält, använd det som stoppsignal. Räkna antalet rader du har sparat mot det, så att en överensstämmelse syns i loggen.
Begränsa varje loop
Sätt ett hårt maximum på sidor i varje loop. En gräns skyddar ditt saldo om ett fältnamn ändras och skriptet fortsätter att be om samma sida.
Välj gränsen från storleken du förväntar dig, höj den sedan medvetet när en verklig domän behöver fler sidor.
Skriv varje sida när den anländer
Spara varje sida till disk så snart den kommer tillbaka, med sidnumret i filnamnet. Ett skript som stannar på sida fyrtio kan återupptas från den senast sparade filen istället för att börja om och betala två gånger.
Behåll filerna i en mapp per domän och datum, så att en omkörning aldrig blandar ihop två hämtningar.
Att köra skripten i ett schema
Valfri scheduler fungerar. Det viktiga är att varje körning lämnar en fil efter sig, och att ett misslyckat körande berättar för någon.
Att välja en värd för jobbet
Cron passar en server med en disk du kontrollerar. Ett CI-jobb passar ett arkiv som redan håller ögonblicksbilderna, så att historiken lever bredvid koden som läser den.
Väljer du vad som helst, behåll domänlistan i en fil, så att att lägga till en domän är en redigering snarare än en ändring av skriptet.
Att varna vid fel, inte vid varje framgång
Varna när skriptet misslyckas, eller när saldet sjunker under en nivå du valt. Ett framgångsmeddelande varje morgon tränar människor att ignorera kanalen som bär det verkliga problemet.
Logga _credits-objektet från varje körning, som Python-exemplet gör, och granska trenden en gång i månaden.
En veckovis jämförelse i fem steg
Välj åtgärderna
Välj de två eller tre anropen som besvarar din fråga. Varje en kostar krediter, så skriv kostnaden bredvid den.
Spara det råa svaret
Lagra JSON:n exakt som den ankom, med domän och datum i filnamnet. Formatering kan vänta till jämförelsesteget.
Sortera nycklar innan du jämför
Använd jq -S eller motsvarande, så att nyckelordningen inte visas som en ändring. Bash-exemplet ovan gör detta.
Jämför listorna, inte filerna
Koppla ihop de två svaren på URL:en eller domänen, rapportera sedan vad som lagts till, tagits bort och ändrats. En rå textdiff av en lång fil är svår att agera på.
Granska diffen och agera
Skicka borttagna länkande domäner till den som äger outreach, och borttagna sidor till den som äger omdirigeringar.
Att testa ett skript innan en cron-jobb beror på det
Ett skript som körs utan tillsyn bör bevisa sig först. Använd en liten domän, läs hela JSON:s, och utöka sedan listan.
En snabb hälsokontroll är att jämföra totalerna med den fria översiktsanropen för samma domän. Siffrorna behöver inte matcha en betald lista exakt, men de bör stämma överens i storleksordning.
Kör med två domäner
Två domäner testar loopen, filnamnen och felvägarna. En domän kan klara sig av tur, medan två visar om looken återställs mellan domäner.
Använd en domän du känner väl och en du inte känner, så att du kan döma om utdata ser rätt ut.
Håll nyckeln borta från loggar och biljetter
Skript skriver ofta ut hela begärandeadressen, och nyckeln sitter i den adressen som en parameter. Ta bort nyckeln från alla rader som lämnar servern, eller skicka den i Authorization-huvudet istället, vilket håller den borta från adressen.
Om en nyckel visas i en biljett eller ett offentligt arkiv, stoppa det schemalagda jobbet som använder det innan nästa körning.
Håll en kort anteckning om var nyckeln finns, vilka skript läser den och vilka värdar de anropar. Den anteckningen är vad du behöver när någon frågar vem som kan spendera saldot.
Att välja åtgärden för varje fråga
Börja från frågan, inte från slutpunktslistan. En migration behöver veta vilka URL:er som bär länkar, medan en outreach-lista behöver domänbetyg. En värd, två frågor. Varje kostar ett annat antal krediter.
Skriv kostnaden bredvid frågan innan du skriver någon kod. Ett skript som körs veckovis multiplicerar en liten pris med femtiosjuttio två, och den multiplikationen är lätt att glömma tills saldet visar det.
Försök igen som slutar när de ska
Försök igen en begäran som misslyckades av en tillfällig anledning, som en timeout eller ett serverfel, ett litet antal gånger med en växande paus mellan försöken. Försök inte igen med ett 401 eller 402, eftersom väntan inte kommer att ändra något av svaren.
Logga varje försök igen med åtgärden och domänen, så att ett mönster av fel visas som ett mönster snarare än som tystnad.
Sätt retry-antalet på ett ställe, så att varje anrop i skriptet följer samma regel. Spridda retry-loopar tenderar att vara oense med varandra, och oenseheten är svår att hitta i en logg.