Rețetă
Urmărește backlinkurile prin diferențe săptămânale pe care le poți citi într-un minut
Extrage, stochează, compară, publică. Întreaga rețetă constă într-un singur fișier Python, un dosar cu fișiere JSON datate și o linie cron.

Rețeta, de la început până la sfârșit
- 1
Creează cheia
Autentifică-te cu Google, creează o cheie în pagina de cont și export-o ca
RANKIFT_KEY. Nu o comite niciodată în repo. - 2
Alege acțiunea
refdomainspentru diferența la nivel de domeniu, ceea ce au nevoie majoritatea alertelor. Foloseștebacklinksdoar când ai nevoie de URL-uri și anchor text, la același cost de 2 credite. - 3
Stochează instantanee datate
Un fișier per domeniu per execuție, numit cu data. Discul este ieftin, iar fișierele vechi îți permit să răspunzi la întrebări pe care nimeni nu le-a pus încă.
- 4
Diferențiază și publică
Compară cele două cele mai recente fișiere, afișează ce a dispărut și ce a apărut, și ieși liniștit dacă ambele liste sunt goale.
- 5
Planifică execuția
Cron luni dimineața. Adaugă o notificare de eroare, deoarece un monitor care tace este mai rău decât unul inexistent.
diff.py
Verificat împotriva parametrilor documentați: action, q, per, page și key. Structura răspunsului variază în funcție de acțiune, așa că afișează un răspuns real și setează ROWS și ID pentru a se potrivi înainte să ai încredere în el.
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])De ce o diferență bate un dashboard
Un grafic îți spune că linia s-a mutat. O diferență îți spune care domenii s-au mutat, ceea ce este lucrul pe care îl poți acționa.
Instrumente precum Ahrefs și Semrush arată linkurile noi și pierdute în interfața lor, iar pentru lucruri ocazionale este suficient. Problema apare la cincizeci de site-uri și un singur analist, când ritualul de luni dimineața de a deschide fiecare proiect consumă dimineața.
Un script transformă acel ritual într-un fișier. Lasă, de asemenea, un arhivă datată, astfel încât în martie să poți răspunde la întrebarea cum arăta profilul în octombrie fără să ceri unui vendor un export.
Linia cron
Rulează luni la 07:00 ora serverului și trimite orice output prin email, motiv pentru care scriptul nu afișează nimic când nu s-a schimbat nimic.
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-listCât costă
| Configurare | Apeluri pe săptămână | Credite pe săptămână | Pe an |
|---|---|---|---|
| 1 domeniu, sub 1.000 de domenii care fac referire | 1 | 2 | aproximativ $0.01 |
| 1 domeniu, 4.000 de domenii care fac referire | 4 | 8 | aproximativ $0.04 |
| Site-ul tău și 5 rivali, 1 pagină fiecare | 6 | 12 | aproximativ $0.06 |
| 50 de site-uri de clienți, 1 pagină fiecare | 50 | 100 | aproximativ $0.52 |

Capcanele pe care le-am întâlnit, ca să le eviți
Instantaneele se schimbă doar când se schimbă indexul. Actualizăm aproximativ lunar, astfel încât majoritatea rulărilor săptămânale returnează o listă identică și nu afișează nimic. Acest lucru este intenționat. Tăcerea este rezultatul așteptat.
Paginare profundă este limitată la 50.000 de rânduri, iar limita de cinci pagini din script te ține mult sub această limită. Domeniile foarte mari au nevoie de un plan diferit: sortează cu sort și order=desc pe un câmp acceptat de acțiune, și oprește-te devreme când rândurile nu mai sunt interesante.
Rulează prima extracție manual și citește JSON-ul. Verifică numele câmpurilor. Apoi compară numărul de rânduri cu totalul de domenii care fac referire dintr-un răspuns al acțiunii gratuite overview, dacă acel răspuns conține unul.
Gestionează explicit HTTP 401 și 402, deoarece 401 înseamnă o cheie greșită și 402 înseamnă că soldul a ajuns la zero. Ambele trebuie incluse în notificarea de eroare. Când o diferență se declanșează, urmează manualul de linkuri pierdute pentru prima oră.
Măsurarea unei campanii de linkuri cumpărate, instantaneu cu instantaneu
Cumpărarea de linkuri fără un punct de referință este o modalitate comună de a ajunge cu un număr pe care nu îl poți apăra. Ia instantaneul înainte ca prima amplasare să fie live și păstrează-l alături de fiecare instantaneu următor.
Apoi compară domeniile care fac referire, nu numărul brut de linkuri, deoarece un singur donator poate avea multe linkuri. Fiecare rând nou în diferență este un site pe care îl poți deschide și verifica manual.
O campanie care pare plată timp de o lună nu este automat un eșec. Actualizările indexului sunt lente, astfel încât diferența întârzie față de ceea ce s-a întâmplat pe paginile live, iar această întârziere face parte din metodă.
Cum măsoară dacă backlinkurile cumpărate au funcționat?
Începe de la data primei amplasări și caută rândurile donatorului care apar după aceasta. Numără doar pe cele care au rămas în următoarele două instantanee. Apoi compară acel număr cu ceea ce ai plătit pentru amplasări și înregistrează rezultatul alături de date.
Ce ar trebui să conțină instantaneul înainte de o achiziție?
Lista completă de domenii care fac referire, salvată în același format de fișier ca fiecare rulare ulterioară, cu data și domeniul în numele fișierului. Un punct de referință într-un format diferit nu poate fi diferențiat, iar aceasta este greșeala pe care nu o poți repara ulterior.

Cum arată o săptămână zgomotoasă în diferență
O săptămână cu mii de rânduri noi nu este întotdeauna o criză. Adesea sunt scrapere. Ele copiază pagini, iar copiile creează linkuri pe care nimeni nu le-a amplasat. Verifică donatorul înainte să presupui orice despre site-ul tău.
Sortează rândurile noi după calitatea donatorului înainte să le citești. Majoritatea listei este de obicei zgomot, iar o privire scurtă asupra rândurilor de top îți spune dacă spike-ul merită restul dimineții tale.
Dacă rândurile sunt pagini scrape, înregistrează numărul și trece mai departe. Dacă sunt site-uri reale cu linkuri către paginile tale monetizate, urmează pașii de triaj.
De ce arată diferența câștiguri din spam?
Pentru că diferența raportează ce a apărut în index, nu ce a ales un om. Spam-ul pe care indexul l-a preluat arată la fel ca un link editorial până deschizi pagina donatorului și o citești.
De câte ori ar trebui să revizuiesc candidații pentru disavow?
Lunar se potrivește mai bine cu ritmul indexului decât zilnic. O revizuire zilnică arată în mare parte aceeași listă din nou, în timp ce una lunară oferă fiecărui candidat timp să fie recrawluit înainte să îl judeci. Pagina traj linkuri spam are pașii de decizie.
Înainte să ai încredere în prima diferență
- Prima extracție a fost citită manual, rând cu rând, pentru cel puțin o pagină.
- Numele câmpurilor se potrivesc cu constantele de sus ale scriptului.
- Un 401 și un 402 eșuează amândoi zgomotos, nu în tăcere.
- Dosarul de instantanee este backupuit sau sincronizat undeva de unde îl poți restaura.
- Cineva altcineva decât autorul a văzut prima alertă și este de acord că merită un mesaj.
Păstrează arhiva de instantanee utilă timp de un an
Păstrează fiecare fișier datat, inclusiv pe cele care par neschimbate. Un an de instantanee săptămânale ocupă puțin spațiu pe disc și răspunde la întrebări pe care nimeni nu le-a pus încă, cum ar fi când a apărut un donator.
Numără fișierele în mod consistent, cu domeniul, data și acțiunea. Numele mixte fac ca scriptul de diferență să aleagă perechea greșită, iar o pereche greșită produce o alertă încrezătoare și greșită.
Compresă fișierele mai vechi o dată pe trimestru dacă spațiul contează. Păstrează cele mai recente douăsprezece necompressate, astfel încât jobul săptămânal să nu aștepte niciodată pe o arhivă.
Cum găsesc primul instantaneu în care a apărut un donator?
Sortează fișierele datate după nume, apoi caută în fiecare domeniul donatorului până la prima potrivire. O buclă scurtă face acest lucru în câteva linii, iar rezultatul este la fel de bun pe cât este denumirea pe care ai păstrat-o de la început.
Ce ar trebui să șterg și ce ar trebui să păstrez?
Păstrează fiecare instantaneu pe care s-a bazat o decizie, plus primul și ultimul din fiecare lună. Șterge restul doar după ce arhiva a fost verificată, deoarece un fișier șters nu poate răspunde la o întrebare mai târziu.
Trimite diferența acolo unde oamenii citesc deja
O diferență care ajunge într-un dosar necitit nu are valoare. Partajat bate privat. Publică rezultatul în canalul pe care echipa ta îl urmărește deja și ține mesajul suficient de scurt pentru a acționa dintr-o privire.
Un mesaj bun numește domeniul, numărul de rânduri pierdute și câștigate și primul pas. Exclude lista completă, care aparține fișierului atașat.
Tăcerea într-o săptămână liniștită face parte din design. Dacă nu s-a schimbat nimic, nu trebuie să amintească nimănui că nu s-a schimbat nimic. Păstrează așa. Canalul rămâne lizibil pentru următoarea alertă reală.
Ce ar trebui să conțină mesajul?
Trei lucruri: numele donatorului sau rivalului, cele două numere și un link către fișierul salvat. Când este atașat un scor, adaugă cel mai bun Domain Rating dintre rândurile noi, deoarece un domeniu puternic schimbă prioritatea mai mult decât zece domenii slabe.
Cine primește notificarea de eroare?
Cineva care poate remedia jobul, nu doar cineva care citește mesajele. Un 401 are nevoie de o cheie nouă, iar un 402 are nevoie de un top-up din pagina de cont. Niciunul nu se rezolvă așteptând următoarea luni.
Extindere
Înlocuiește refdomains cu backlinks când alerta are nevoie de URL-ul donatorului și anchor text. Ține cont de același cost de 2 credite.
Adaugă bulk_dr pentru a evalua fiecare domeniu nou, la un credit per apel de până la 2.000 de domenii. Apoi mesajul tău poate spune „3 noi, cel mai bun DR 72” în loc de o listă goală.
Pentru Google Sheets, același șir de interogare funcționează în Apps Script cu UrlFetchApp. Și pentru rivali, folosește pragurile din alerte backlink competitor.