Ricetta
Monitora i backlink con un diff settimanale che puoi leggere in un minuto
Estrai, archivia, confronta, invia. L'intera ricetta consiste in un file Python, una cartella di file JSON datati e una riga di cron.

La ricetta, dall'inizio alla fine
- 1
Crea la chiave
Accedi con Google, crea una chiave nella pagina dell'account ed esportala come
RANKIFT_KEY. Non commetterla mai nel repository. - 2
Scegli l'azione
refdomainsper il diff a livello di dominio, che è ciò di cui hanno bisogno la maggior parte degli alert. Usabacklinkssolo quando ti servono URL e anchor text, allo stesso costo di 2 crediti. - 3
Archivia gli snapshot datati
Un file per dominio per esecuzione, denominato con la data. Il disco è economico e i file vecchi ti permettono di rispondere a domande che nessuno ha ancora posto.
- 4
Diff e invio
Confronta i due file più recenti, stampa cosa è uscito e cosa è entrato, e esci silenziosamente se entrambe le liste sono vuote.
- 5
Pianifica l'esecuzione
Cron lunedì mattina. Aggiungi una notifica di errore, perché un monitor silenzioso è peggio di nessuno.
diff.py
Verificato rispetto ai parametri documentati: action, q, per, page e key. La struttura della risposta varia in base all'azione, quindi stampa una risposta reale e imposta ROWS e ID in modo corrispondente prima di fidarti.
import json, os, sys, glob, urllib.parse, urllib.request
KEY, SITE = os.environ['RANKIFT_KEY'], 'https://rankift.com/api.php'
ROWS, ID = 'rows', 'domain' # adjust after inspecting one response
def pull(domain):
out, page = [], 1
while True:
qs = urllib.parse.urlencode({'action': 'refdomains', 'q': domain,
'per': 1000, 'page': page, 'key': KEY})
with urllib.request.urlopen(f'{SITE}?{qs}') as r:
batch = json.load(r)[ROWS]
out += batch
if len(batch) < 1000 or page >= 5: # five pages = 5,000 rows
return out
page += 1
domain, date = sys.argv[1], sys.argv[2]
json.dump(pull(domain), open(f'snap/{domain}-{date}.json', 'w'))
files = sorted(glob.glob(f'snap/{domain}-*.json'))
if len(files) > 1:
old = {r[ID] for r in json.load(open(files[-2]))}
new = {r[ID] for r in json.load(open(files[-1]))}
lost, gained = sorted(old - new), sorted(new - old)
if lost or gained:
print(f'{domain}: -{len(lost)} +{len(gained)}')
print('lost:', lost[:25])Perché un diff batte un dashboard
Un grafico ti dice che la linea si è spostata. Un diff ti dice quali domini si sono spostati, che è la cosa su cui puoi agire.
Strumenti come Ahrefs e Semrush mostrano i link nuovi e persi nella loro interfaccia, e per lavori ad hoc va bene. Il problema inizia con cinquanta siti e un solo analista, quando la ritualistica del lunedì di aprire ogni progetto consuma la mattina.
Uno script trasforma quel rituale in un file. Lascia anche un archivio datato, così a marzo puoi rispondere a com'era il profilo a ottobre senza chiedere a un fornitore un'esportazione.
La riga di cron
Esegue lunedì alle 07:00 ora del server e invia via email qualsiasi output, motivo per cui lo script non stampa nulla quando non è cambiato nulla.
0 7 * * 1 cd /srv/linkwatch && for d in example.com rival-one.com rival-two.com; do python3 diff.py $d $(date +%F); done | mail -s 'link diff' your-team-listQuanto costa
| Configurazione | Chiamate a settimana | Crediti a settimana | All'anno |
|---|---|---|---|
| 1 dominio, meno di 1.000 domini di riferimento | 1 | 2 | circa $0.01 |
| 1 dominio, 4.000 domini di riferimento | 4 | 8 | circa $0.04 |
| Il tuo sito e 5 rivali, 1 pagina ciascuno | 6 | 12 | circa $0.06 |
| 50 siti client, 1 pagina ciascuno | 50 | 100 | circa $0.52 |

Insidie che abbiamo trovato, così non le trovi
Gli snapshot cambiano solo quando cambia l'indice. Aggiorniamo circa mensilmente, quindi la maggior parte delle esecuzioni settimanali restituisce un elenco identico e non stampa nulla. È intenzionale. Il silenzio è il risultato atteso.
La paginazione profonda è limitata a 50.000 righe, e il limite di cinque pagine nello script ti tiene ben al di sotto. I domini enormi richiedono un piano diverso: ordina con sort e order=desc su un campo che l'azione accetta, e fermati presto una volta che le righe smettono di essere interessanti.
Esegui il primo pull manualmente e leggi il JSON. Controlla i nomi dei campi. Poi confronta il conteggio delle righe con il totale dei domini di riferimento da una risposta dell'azione gratuita overview, se quella risposta ne contiene uno.
Gestisci esplicitamente HTTP 401 e 402, perché 401 significa una chiave errata e 402 significa che il saldo è arrivato a zero. Entrambi devono essere inclusi nella tua notifica di errore. Quando un diff si attiva, segui il runbook per i link persi per la prima ora.
Misurare una campagna di link acquistati, uno snapshot alla volta
Acquistare link senza una baseline è un modo comune per ritrovarsi con un numero che non puoi difendere. Prendi lo snapshot prima che la prima collocazione sia attiva e tienilo accanto a ogni snapshot successivo.
Poi confronta i domini di riferimento, non i conteggi grezzi, perché un donatore può contenere molti link. Ogni nuova riga nel diff è un sito che puoi aprire e controllare manualmente.
Una campagna che sembra piatta per un mese non è automaticamente un fallimento. Gli aggiornamenti dell'indice sono lenti, quindi il diff è in ritardo rispetto a quanto è successo sulle pagine live, e quel ritardo fa parte del metodo.
Come misuro se i backlink acquistati hanno funzionato?
Parti dalla data della prima collocazione e cerca le righe del donatore che appaiono dopo. Conta solo quelle che sono rimaste nei due snapshot successivi. Poi confronta quel conteggio con quanto hai pagato per le collocazioni e registra il risultato accanto alle date.
Cosa dovrebbe contenere lo snapshot prima di un acquisto?
L'elenco completo dei domini di riferimento, salvato nello stesso formato di ogni esecuzione successiva, con la data e il dominio nel nome del file. Una baseline in un formato diverso non può essere confrontata, ed è l'unico errore che non puoi riparare dopo.

Come appare una settimana rumorosa nel diff
Una settimana con migliaia di nuove righe non è sempre una crisi. Spesso sono scraper. Copiano pagine e le copie creano link che nessuno ha piazzato. Controlla prima il donatore prima di assumere qualsiasi cosa sul tuo sito.
Ordina le nuove righe per qualità del donatore prima di leggerle. La maggior parte della lista è solitamente rumore e una breve occhiata alle prime righe ti dice se il picco merita il resto della tua mattina.
Se le righe sono pagine di scraper, registra il conteggio e vai avanti. Se sono siti reali con link alle tue pagine monetizzate, segui i passaggi di triage.
Perché il diff mostra guadagni dagli spam?
Perché il diff riporta ciò che è apparso nell'indice, non ciò che ha scelto un umano. Lo spam che l'indice ha raccolto appare uguale a un link editoriale finché non apri la pagina del donatore e la leggi.
Con quale frequenza dovrei rivedere i candidati al disavow?
Mensile si adatta meglio al ritmo dell'indice rispetto al giornaliero. Una revisione giornalistica mostra principalmente di nuovo lo stesso elenco, mentre una mensile dà a ogni candidato il tempo di essere ricrawlato prima di giudicarlo. La pagina triage link spam ha i passaggi decisionali.
Prima di fidarti del primo diff
- Il primo pull è stato letto manualmente, riga per riga, per almeno una pagina.
- I nomi dei campi corrispondono alle costanti in cima allo script.
- Un 401 e un 402 falliscono entrambi il lavoro rumorosamente, non silenziosamente.
- La cartella degli snapshot è backuppata o sincronizzata da qualche parte dove puoi ripristinarla.
- Qualcuno diverso dall'autore ha visto il primo alert e concorda che vale la pena di essere un messaggio.
Mantieni l'archivio degli snapshot utile per un anno
Tieni ogni file datato, inclusi quelli che sembrano invariati. Un anno di snapshot settimanali occupa poco spazio su disco e risponde a domande che nessuno ha ancora posto, come quando un donatore è apparso per la prima volta.
Nomina i file in modo coerente, con il dominio, la data e l'azione. Nomi misti fanno sì che lo script diff scelga la coppia sbagliata, e una coppia sbagliata produce un alert sicuro ma errato.
Comprimi i file più vecchi una volta al trimestre se lo spazio è importante. Mantieni i dodici più recenti non compressi, così il lavoro settimanale non deve mai aspettare un archivio.
Come trovo il primo snapshot in cui è apparso un donatore?
Ordina i file datati per nome, poi cerca in ciascuno il dominio del donatore fino alla prima corrispondenza. Un breve loop fa questo in poche righe, e il risultato è buono solo quanto la denominazione che hai mantenuto dall'inizio.
Cosa devo eliminare e cosa devo mantenere?
Mantieni ogni snapshot su cui è stata basata una decisione, più il primo e l'ultimo di ogni mese. Elimina il resto solo dopo che l'archivio è stato controllato, perché un file eliminato non può rispondere a una domanda più tardi.
Invia il diff dove le persone leggono già
Un diff che atterra in una cartella non letta non ha valore. Condiviso batte privato. Invia il risultato al canale che il tuo team guarda già e mantieni il messaggio abbastanza breve da agire con un'occhiata.
Un buon messaggio nomina il dominio, il conteggio di righe perse e guadagnate e il primo passo. Esclude l'elenco completo, che appartiene al file allegato.
Il silenzio in una settimana tranquilla fa parte del design. Se non è cambiato nulla, nessuno ha bisogno di un promemoria che non è cambiato nulla. Tienilo così. Il canale rimane leggibile per il prossimo alert reale.
Cosa dovrebbe contenere il messaggio?
Tre cose: il nome del donatore o del rivale, i due conteggi e un link al file salvato. Quando è allegato un punteggio, aggiungi il Domain Rating migliore tra le nuove righe, perché un forte dominio cambia la priorità più di dieci deboli.
Chi riceve la notifica di errore?
Qualcuno che può risolvere il lavoro, non solo qualcuno che legge i messaggi. Un 401 ha bisogno di una nuova chiave e un 402 ha bisogno di un ricarico dalla pagina dell'account. Nessuno dei due si risolve aspettando il prossimo lunedì.
Estenderlo
Scambia refdomains con backlinks quando l'alert ha bisogno dell'URL del donatore e dell'anchor text. Tieni presente lo stesso costo di due crediti.
Aggiungi bulk_dr per valutare ogni nuovo dominio, a un credito per chiamata fino a 2.000 domini. Poi il tuo messaggio può dire "3 nuovi, DR migliore 72" invece di un elenco nudo.
Per Google Sheets, la stessa stringa di query funziona in Apps Script con UrlFetchApp. E per i rivali, usa le soglie da alert backlink competitor.