Strumento per verificare i backlink del sito: script programmabili
Ogni chiamata qui funziona con curl o qualsiasi client HTTP. Sostituisci la chiave, mantieni il pattern: chiama, salva, diff.
Team di ricerca ArchiLinks ·

Regole fondamentali
Una chiamata, una fattura. Ogni richiesta viene addebitata una volta indipendentemente dal numero di righe, e una singola chiamata restituisce fino a 1.000 righe. La paginazione profonda si ferma a 50.000 righe, e per accetta valori da 10 a 5.000.
Questo cambia il modo in cui scrivi gli script. Chiedi per=1000 e pagina solo quando ne hai bisogno, perché uno strumento per verificare i backlink del sito basato su pagine piccole moltiplica per dieci il tuo costo senza alcun vantaggio. Gli errori sono chiari: HTTP 401 per una chiave mancante, 402 quando i crediti sono esauriti, e ogni corpo JSON contiene ok.
Esegui ogni script una volta manualmente su un dominio piccolo e leggi il JSON. I nomi dei campi, il contenitore delle righe e i campi di paginazione dovrebbero provenire da una risposta reale, non dai nostri esempi, quindi confermalii prima che un lavoro cron dipenda da essi.
Python: salva uno snapshot datato
I nomi dei campi nella risposta sono mostrati come esempio. Stampa una risposta prima di affidarti a una chiave.
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: valutazione Domain Rating in bulk per un elenco
bulk_dr accetta fino a 2.000 domini per 1 credito per chiamata, tramite GET con un parametro domains o tramite corpo POST. Il separatore virgola qui sotto è un esempio; testa prima con due domini. Node 18 o versioni successive ha fetch integrato.
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 e jq: diff settimanale
Salva uno snapshot con la data, quindi confronta due file. Mantieni il cron settimanale o mensile; l'aggiornamento dell'indice avviene circa mensilmente.
# 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 -50Quale azione per quale script
| Script | Azione | Costo per esecuzione | Output |
|---|---|---|---|
| Baseline di migrazione | toppages, refdomains | 4 crediti | Due file JSON |
| Pulizia outreach | bulk_dr | 1 credito per chiamata, fino a 2.000 domini | DR per prospect |
| Sovrapposizione concorrenti | intersect | 2 crediti | Siti che linkano a 2–10 domini |
| Monitoraggio anchor | anchors | 2 crediti | Elenco anchor text |
| Verifica portfolio | compare | 1 credito per chiamata, fino a 20 domini | Metriche affiancate |

Gestione dei casi limite
Gli script falliscono ai bordi. Pianificali.
Avvolgi ogni chiamata in un retry che attende e si arrende dopo tre tentativi, tranne per 401 e 402, che un retry non risolverà mai. Registra l'oggetto _credits da ogni risposta autenticata, così un picco di spesa apparirà nei log prima che appaia nel tuo saldo, e limita i loop con un numero massimo di pagine rigido.
Mantieni gli snapshot in git o in storage oggetti con la data nel nome del file. Semplice, noioso, efficace. Per le migrazioni, abbina questi script alla ricetta della mappa di reindirizzamento e alla checklist di migrazione. Gli utenti di Google Sheets possono chiamare gli stessi URL da Apps Script con UrlFetchApp, e un foglio con un trigger mensile è un monitor perfettamente valido.
Domande sugli script
Tre domande sorgono prima che la maggior parte degli script vada in produzione, e ciascuna ha una risposta breve.
Come verifico quanti backlink ha il mio sito, gratuitamente?
Chiama l'azione overview o stats senza chiave. Entrambe sono gratuite e restituiscono i totali dal nostro indice di link.
Per gli elenchi dietro i totali, hai bisogno di una chiave e 2 crediti per chiamata.
Cosa succede quando il saldo si esaurisce?
L'API restituisce HTTP 402. Il tuo script dovrebbe fermarsi e inviare un alert, non riprovare in un loop. Ricarica dalla pagina account con USDT (TRC-20) e riesegui.
Posso chiamarlo da un browser?
Sì. CORS è aperto. Tuttavia, non inserire una chiave nel codice front-end pubblico, poiché chiunque può leggerla e spendere i tuoi crediti.

Paginazione senza sprecare crediti
La paginazione è dove gli script costano silenziosamente più del dovuto. Ogni richiesta di pagina è una chiamata separata con il proprio addebito, quindi un loop che richiede una pagina in più paga per nulla.
Leggi i campi di paginazione in una risposta reale prima di scrivere il loop. Gli esempi su questo sito mostrano la forma, ma i nomi e il segnale di stop provengono dal JSON live.
Fermati quando una pagina è più corta del previsto
Una pagina con meno righe di quelle richieste è solitamente l'ultima. Lascia che il loop si fermi lì invece di richiedere una pagina extra per sicurezza.
Se la risposta contiene un campo total o next-page, usalo come segnale di stop. Conta le righe che hai salvato contro di esso, così una discrepanza apparirà nel log.
Limita ogni loop
Imposta un massimo rigido sulle pagine in ogni loop. Un limite protegge il tuo saldo se un nome di campo cambia e lo script continua a richiedere la stessa pagina.
Scegli il limite in base alla dimensione che ti aspetti, poi aumentalo deliberatamente quando un dominio reale ha bisogno di più pagine.
Scrivi ogni pagina man mano che arriva
Salva ogni pagina su disco non appena arriva, con il numero di pagina nel nome del file. Uno script che si ferma alla pagina quaranta può riprendere dall'ultimo file salvato invece di ricominciare e pagare due volte.
Mantieni i file in una cartella per dominio e per data, così una riesecuzione non mescola due estrazioni.
Esecuzione degli script in pianificazione
Va bene qualsiasi scheduler. Ciò che conta è che ogni esecuzione lasci un file dietro di sé, e che un'esecuzione fallita avvisi qualcuno.
Scelta dell'host per il lavoro
Cron si adatta a un server con un disco che controlli tu. Un lavoro CI si adatta a un repository che mantiene già gli snapshot, così la storia vive accanto al codice che la legge.
Qualunque cosa tu scelga, mantieni l'elenco dei domini in un file, così aggiungere un dominio è una modifica e non un cambiamento allo script.
Alert sui fallimenti, non su ogni successo
Invia un alert quando lo script fallisce, o quando il saldo scende al di sotto di un livello che hai scelto. Un messaggio di successo ogni mattina abitua le persone a ignorare il canale che trasporta il vero problema.
Registra l'oggetto _credits da ogni esecuzione, come fa l'esempio Python, e rivedi il trend una volta al mese.
Un diff settimanale in cinque passaggi
Scegli le azioni
Scegli le due o tre chiamate che rispondono alla tua domanda. Ognuna costa crediti, quindi scrivi il costo accanto ad essa.
Salva la risposta grezza
Memorizza il JSON esattamente come è arrivato, con il dominio e la data nel nome del file. La formattazione può aspettare fino al passaggio diff.
Ordina le chiavi prima di confrontare
Usa jq -S o un equivalente, così l'ordine delle chiavi non apparirà come un cambiamento. L'esempio bash sopra lo fa.
Confronta gli elenchi, non i file
Unisci le due risposte su URL o dominio, quindi segnala cosa è stato aggiunto, rimosso e modificato. Un diff testuale grezzo di un file lungo è difficile da utilizzare.
Rivedi il diff e agisci
Invia i domini che linkano rimossi a chi si occupa dell'outreach, e le pagine rimosse a chi si occupa dei reindirizzamenti.
Testare uno script prima che un lavoro cron dipenda da esso
Uno script che gira in modalità non presidiata dovrebbe dimostrarsi prima. Usa un piccolo dominio, leggi il JSON completo, e solo poi amplia l'elenco.
Un rapido controllo di integrità è confrontare i totali con la chiamata overview gratuita per lo stesso dominio. I numeri non devono corrispondere esattamente a un elenco a pagamento, ma dovrebbero essere coerenti per ordine di grandezza.
Esegui con due domini
Due domini testano il loop, i nomi dei file e i percorsi di errore. Un dominio può passare per fortuna, mentre due mostrano se il loop si resetta tra i domini.
Usa un dominio che conosci bene e uno che non conosci, così puoi giudicare se l'output sembra corretto.
Mantieni la chiave fuori dai log e dai ticket
Gli script spesso stampano l'indirizzo completo della richiesta, e la chiave si trova in quell'indirizzo come parametro. Rimuovi la chiave da qualsiasi riga che lascia il server, o inviala nell'intestazione Authorization, il che la tiene fuori dall'indirizzo.
Se una chiave appare in un ticket o in un repository pubblico, interrompi il lavoro pianificato che la usa prima della prossima esecuzione.
Tieni una breve nota di dove risiede la chiave, quali script la leggono e quali host chiamano. Quella nota è ciò di cui hai bisogno quando qualcuno chiede chi può spendere il saldo.
Scegliere l'azione per ogni domanda
Parti dalla domanda, non dall'elenco degli endpoint. Una migrazione ha bisogno di sapere quali URL portano link, mentre un elenco di outreach ha bisogno dei punteggi di dominio. Un host, due domande. Ognuna costa un numero diverso di crediti.
Scrivi il costo accanto alla domanda prima di scrivere qualsiasi codice. Uno script che gira settimanalmente moltiplica un piccolo prezzo per cinquanta-due, e quella moltiplicazione è facile dimenticare finché il saldo non lo mostra.
Retry che si fermano quando dovrebbero
Riprova una richiesta fallita per un motivo temporaneo, come un timeout o un errore del server, un numero limitato di volte con una pausa crescente tra i tentativi. Non riprovare un 401 o un 402, poiché aspettare non cambierà nessuna delle due risposte.
Registra ogni retry con l'azione e il dominio, così un pattern di fallimenti apparirà come un pattern piuttosto che come silenzio.
Imposta il conteggio dei retry in un unico punto, così ogni chiamata nello script segue la stessa regola. I loop di retry sparsi tendono a disaccordare tra loro, e il disaccordo è difficile da trovare in un log.