Instrument de verificare a backlinkurilor: scripturi pe care le poți programa
Fiecare apel de aici funcționează cu curl sau orice client HTTP. Înlocuiește cheia, păstrează modelul: apel, salvare, diff.
Echipa de cercetare ArchiLinks ·

Reguli de bază
Un apel, o factură. Fiecare solicitare este taxată o dată indiferent de numărul de rânduri, iar un singur apel returnează până la 1,000 de rânduri. Paginarea profundă se oprește la 50,000 de rânduri, iar per acceptă valori de la 10 la 5,000.
Acest lucru schimbă modul în care scrii scripturi. Cere per=1000 și paginează doar când ai nevoie de mai mult, deoarece un instrument de verificare a backlinkurilor construit pe pagini mici îți multiplică costul de zece ori fără niciun câștig. Erorile sunt clare: HTTP 401 pentru o cheie lipsă, 402 când creditul s-a epuizat, iar fiecare corp JSON conține ok.
Rulează fiecare script o dată manual împotriva unui domeniu mic și citește JSON-ul. Numele câmpurilor, containerul de rânduri și câmpurile de paginare ar trebui să provină dintr-un răspuns real, nu din exemplele noastre, așa că confirmă-le înainte ca un job cron să depindă de ele.
Python: salvează o instantanee datată
Numele câmpurilor din răspuns sunt afișate ca exemplu. Tipărește un răspuns înainte de a te baza pe o cheie.
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: rating de domeniu în bloc pentru o listă
bulk_dr acceptă până la 2,000 de domenii pentru 1 credit pe apel, prin GET cu un parametru domains sau prin body POST. Separatorul cu virgulă de mai jos este un exemplu; testează mai întâi cu două domenii. Node 18 sau o versiune ulterioară are fetch integrat.
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: diff săptămânal
Salvează o instantanee cu data, apoi compară două fișiere. Păstrează cron-ul săptămânal sau lunar; indexul se reîmprospătează aproximativ lunar.
# 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 -50Care acțiune pentru care script
| Script | Acțiune | Cost pe rulare | Output |
|---|---|---|---|
| Linia de bază pentru migrare | toppages, refdomains | 4 credite | Două fișiere JSON |
| Curățare outreach | bulk_dr | 1 credit pe apel, până la 2,000 de domenii | DR per prospect |
| Suprapunere rivali | intersect | 2 credite | Site-uri care linkuiesc către 2–10 domenii |
| Vigilență anchor | anchors | 2 credite | Listă de anchor text |
| Verificare portofoliu | compare | 1 credit pe apel, până la 20 de domenii | Metrici side-by-side |

Gestionarea cazurilor limită
Scripturile eșuează la limite. Planifică-le.
Înconjoară fiecare apel cu un retry care așteaptă și renunță după trei încercări, cu excepția 401 și 402, pe care un retry nu le va rezolva niciodată. Loghează obiectul _credits din fiecare răspuns autentificat, astfel încât un spike în cheltuieli să apară în loguri înainte să apară în sold, și limitează buclele cu un număr maxim dur de pagini.
Păstrează instantaneele în git sau stocare obiect cu data în numele fișierului. Simplu, plictisitor, eficient. Pentru migrări, asociază aceste scripturi cu rețeta de hartă de redirect și lista de verificare a migrării. Utilizatorii Google Sheets pot apela aceleași URL-uri din Apps Script cu UrlFetchApp, iar un sheet cu un trigger lunar este un monitor perfect bun.
Întrebări despre scripturi
Trei întrebări apar înainte ca majoritatea scripturilor să meargă live, iar fiecare are un răspuns scurt.
Cum verific câte backlinkuri are site-ul meu, gratuit?
Apel acțiunea overview sau stats fără cheie. Ambele sunt gratuite și returnează totalurile din propriul index de linkuri.
Pentru listele din spatele totalurilor, ai nevoie de o cheie și 2 credite pe apel.
Ce se întâmplă când soldul se epuizează?
API returnează HTTP 402. Scriptul tău ar trebui să se oprească și să alerteze, nu să retry în buclă. Completează de pe pagina de cont cu USDT (TRC-20) și rulează din nou.
Pot să apelez de pe un browser?
Da. CORS este deschis. Nu pune o cheie în codul front-end public, totuși, deoarece oricine o poate citi și cheltui creditul.

Paginare fără a irosi credite
Paginarea este unde scripturile costă liniștit mai mult decât ar trebui. Fiecare solicitare de pagină este un apel separat cu propria taxă, astfel încât o buclă care cere o pagină în plus plătește pentru nimic.
Citește câmpurile de paginare dintr-un singur răspuns real înainte să scrii bucla. Exemplele de pe acest site arată forma, dar numele și semnalul de stop vin din JSON-ul live.
Oprește-te când o pagină vine incompletă
O pagină cu mai puține rânduri decât ai cerut este de obicei ultima. Lasă bucla să se oprească acolo în loc să ceri o pagină extra pentru a fi sigur.
Dacă răspunsul conține un total sau un câmp next-page, folosește-l ca semnal de stop. Numără rândurile pe care le-ai salvat împotriva lui, astfel încât o neconcordanță să apară în log.
Limitează fiecare buclă
Setează un maxim dur pe pagini în fiecare buclă. O limită îți protejează soldul dacă un nume de câmp se schimbă și scriptul continuă să ceară aceeași pagină.
Alege capul din dimensiunea pe care te aștepți, apoi ridică-l deliberat când un domeniu real are nevoie de mai multe pagini.
Scrie fiecare pagină pe măsură ce ajunge
Salvează fiecare pagină pe disc imediat ce vine înapoi, cu numărul paginii în numele fișierului. Un script care se oprește la pagina patruzeci poate relua de la ultimul fișier salvat în loc să înceapă din nou și să plătească de două ori.
Păstrează fișierele într-un folder per domeniu și per dată, astfel încât o reluare să nu amestece două extrageri.
Rularea scripturilor la programare
Orice scheduler va funcționa. Ceea ce contează este că fiecare rulare lasă un fișier în urmă, și că o rulare eșuată îi spune cuiva.
Alegerea unui host pentru job
Cron se potrivește unui server cu un disc pe care îl controlezi. Un job CI se potrivește unui repository care deja păstrează instantaneele, astfel încât istoricul trăiește lângă codul care îl citește.
Indiferent ce alegi, păstrează lista de domenii într-un fișier, astfel încât adăugarea unui domeniu este o editare și nu o modificare a scriptului.
Alertare la eșec, nu la fiecare succes
Alertează când scriptul eșuează, sau când soldul scade sub un nivel pe care l-ai ales. Un mesaj de succes în fiecare dimineață antrenează oamenii să ignore canalul care transportă problema reală.
Loghează obiectul _credits din fiecare rulare, așa cum face exemplul Python, și revizuiește trendul o dată pe lună.
Un diff săptămânal în cinci pași
Alege acțiunile
Alege cele două sau trei apeluri care răspund la întrebarea ta. Fiecare costă credite, așa că scrie costul lângă el.
Salvează răspunsul brut
Stochează JSON exact așa cum a sosit, cu domeniul și data în numele fișierului. Formatarea poate aștepta până la pasul diff.
Sortează cheile înainte de a compara
Folosește jq -S sau un echivalent, astfel încât ordinea cheilor să nu apară ca o modificare. Exemplul bash de mai sus face acest lucru.
Compară listele, nu fișierele
Unește cele două răspunsuri pe URL sau domeniu, apoi raportează ce a fost adăugat, eliminat și modificat. Un diff brut de text al unui fișier lung este greu de acționat.
Revizuiește diff-ul și acționează
Trimite domeniile care linkuiesc eliminate către cineva care deține outreach, și paginile eliminate către cineva care deține redirect-uri.
Testarea unui script înainte ca un job cron să depindă de el
Un script care rulează neîngrijit ar trebui să se dovedească mai întâi. Folosește un domeniu mic, citește JSON-ul complet, și doar apoi lărgește lista.
Un check de sănătate rapid este să compari totalurile cu apelul overview gratuit pentru același domeniu. Numerele nu trebuie să se potrivească exact cu o listă plătită, dar ar trebui să fie de aceeași scară.
Rulează cu două domenii
Două domenii testează bucla, numele fișierelor și căile de eroare. Un domeniu poate trece prin noroc, în timp ce două arată dacă bucla se resetează între domenii.
Folosește un domeniu pe care îl cunoști bine și unul pe care nu îl cunoști, astfel încât să poți judeca dacă output-ul arată corect.
Păstrează cheia în afara logurilor și ticketelor
Scripturile imprimă adesea adresa completă a cererii, iar cheia stă în acea adresă ca parametru. Elimină cheia din orice linie care părăsește serverul, sau trimite-o în header-ul Authorization, ceea ce o ține în afara adresei.
Dacă o cheie apare într-un ticket sau într-un repository public, oprește jobul programat care o folosește înainte de următoarea rulare.
Păstrează o notă scurtă despre unde trăiește cheia, care scripturi o citesc și ce host-uri apelează. Acea notă este ceea ce ai nevoie când cineva întreabă cine poate cheltui soldul.
Alegerea acțiunii pentru fiecare întrebare
Începe de la întrebare, nu de la lista de endpoint-uri. O migrare trebuie să știe care URL-uri au linkuri, în timp ce o listă de outreach are nevoie de scoruri de domeniu. Un host, două întrebări. Fiecare costă un număr diferit de credite.
Scrie costul lângă întrebare înainte să scrii orice cod. Un script care rulează săptămânal multiplică un preț mic de cincizeci și două, și acea multiplicare este ușor de uitat până când soldul o arată.
Retry-uri care se opresc când ar trebui
Retry la o cerere care a eșuat dintr-un motiv temporar, cum ar fi un timeout sau o eroare de server, de un număr mic de ori cu o pauză crescând între încercări. Nu retry la un 401 sau un 402, deoarece așteptarea nu va schimba niciun răspuns.
Loghează fiecare retry cu acțiunea și domeniul, astfel încât un model de eșecuri să apară ca un model și nu ca un tăcere.
Setează numărul de retry-uri într-un singur loc, astfel încât fiecare apel din script să urmeze aceeași regulă. Buclele de retry împrăștiate tind să nu fie de acord între ele, iar neconcordanța este greu de găsit în log.