Schweregradtabelle

Prüfung auf schlechte Backlinks: Diff-Snapshots in SQLite

Kein Skript kann eine Linkstruktur als toxisch für Sie einstufen. Es kann Ihnen jedoch mitteilen, welche verweisenden Domains neu sind, welche verschwunden sind und welche so seltsam aussehen, dass sie manuell geprüft werden sollten.

Stone vault with clay tablets and a brass caliper measuring data points

Schweregradtabelle für neue verweisende Domains

Unsere eigenen Faustregeln für das Triage-Verfahren, keine Google-Definition
StufeSignalAktion
IgnorierenNeue Domain, DR über 30, Anchor ist Ihre Marke oder eine nackte URLProtokollieren, weitermachen
Ansehen50 oder mehr neue Domains in einer Woche von einer TLD, die Sie nie angesprochen habenÖffnen Sie zehn davon
Genau hinsehenGleicher Exact-Match-Anchor auf 20 oder mehr neuen DomainsPrüfen Sie die Anchor-Wolke, finden Sie die Quelle
HandelnNach Bezahlung aussehendes Netzwerk oder gehackte Seiten, die auf Sie verweisenDokumentieren; eine Disavow-Datei nur in Betracht ziehen, wenn Sie auch eine manuelle Maßnahme haben
WartenEine Domain ist diesen Monat verschwundenNach dem nächsten monatlichen Refresh erneut prüfen

Warum Diff statt einmaligem Scannen

Ein einzelner Snapshot zeigt Ihnen, was vorhanden ist. Ein Diff zeigt Ihnen, was sich geändert hat, und genau dort treten Probleme auf.

Google hat seit der Penguin 4.0-Veröffentlichung im September 2016 und erneut im Dezember 2022 bei der Link-Spam-Aktualisierung gesagt, dass es spamartige Links meist ignoriert, anstatt sie zu bestrafen. SpamBrain übernimmt diese Arbeit. Ein Überfluss an Müll ist daher eher Lärm als eine Bedrohung, und der Diff bewahrt Sie hauptsächlich davor, auf Lärm zu reagieren.

Bewahren Sie Ihre eigene Historie auf. Suites überschreiben ihre eigenen.

Erstellen Sie die Historietabelle in vier Schritten

Der Diff funktioniert nur, wenn jeder Lauf in derselben Tabelle und in derselben Struktur landet. Diese Schritte gewährleisten dies.

01

Erstellen Sie die Tabelle einmalig

Führen Sie eine Create-If-Not-Exists-Anweisung mit den benötigten Spalten aus: das Datum, die Domain und das Score. Halten Sie dies im Skript, damit eine neue Maschine die gleiche Tabelle ohne manuellen Schritt neu aufbauen kann.

02

Fügen Sie eine Zeile pro Domain pro Tag ein

Verwenden Sie eine parametrisierte Einfügung und committen Sie einmal pro Lauf. Ein einzelner Commit verhindert, dass ein Absturz einen halben Tag in der Datei hinterlässt.

03

Schützen Sie sich vor einem zweiten Lauf

Löschen Sie die Zeilen des Tages vor dem Einfügen oder fügen Sie einen eindeutigen Schlüssel für Tag und Domain hinzu. Ein erneuter Lauf am selben Tag ersetzt dann die Zeilen, anstatt sie zu verdoppeln.

04

Vergleichen Sie mit dem vorherigen Tag auf der Festplatte

Wählen Sie das neueste frühere Datum mit einem max(day)-Filter, nicht das Datum vom Vortag. Der Vergleich bleibt korrekt, wenn eine Woche übersprungen wurde.

diff.py

Zwei Tabellen wären übersichtlicher. Eine reicht für ein Hobby-Setup: eine Zeile pro Domain pro Stichtagsdatum.

python
import json, sqlite3, sys, datetime
db = sqlite3.connect('links.db')
db.execute('create table if not exists snap(day text, dom text, dr int)')
rows = json.load(open(sys.argv[1]))
day = datetime.date.today().isoformat()
db.executemany('insert into snap values (?,?,?)',
               [(day, r.get('domain'), r.get('dr')) for r in rows])
db.commit()
prev = db.execute('select max(day) from snap where day < ?', (day,)).fetchone()[0]
if prev:
    new = db.execute('select dom from snap where day=? except select dom from snap where day=?', (day, prev)).fetchall()
    gone = db.execute('select dom from snap where day=? except select dom from snap where day=?', (prev, day)).fetchall()
    print(len(new), 'new,', len(gone), 'gone')

Fehlerbehebung beim Diff

SymptomWahrscheinliche UrsacheLösung
Hunderte 'verschwundene' über NachtIndex-Refresh hat die Stichprobe ausgetauschtMonatlich vergleichen, nicht täglich
Jede Domain sieht neu ausTabelle war leer oder day-Format hat sich geändertPrüfen Sie select distinct day
DR-Spalte durchgehend NULLDer Feldname der Zeile unterscheidet sich von drEine rohe Zeile ausgeben und anpassen
Duplikate nach einem NeulaufSelber Tag zweimal eingefügtDiesen Tag zuerst löschen oder einen eindeutigen Schlüssel hinzufügen
Anzahl unter totalPaginierung endete vorzeitigBeheben Sie die Schleife im Actions Runbook
Gardener observing ferns with a hand lens to compare growth patterns

Schwellenwerte aus Ihrer eigenen Historie auswählen

Ein Schwellenwert, der aus einem Blogbeitrag kopiert wurde, ist eine Vermutung über die Website eines anderen. Ein schlechter Backlink-Prüfer ist nur so nützlich wie seine Grenzwerte, und Ihre eigene Historie zeigt Ihnen, wie Normalzustand für Ihre Domain aussieht.

Beginnen Sie damit, einige Monate lang zu protokollieren, ohne auf etwas zu reagieren. Lassen Sie es sich einspielen. Schreiben Sie dann die typische wöchentliche Schwankung auf. Erst danach legen Sie die Grenzwerte in der Schweregradtabelle fest.

Starten Sie mit einer Basislinie

Protokollieren Sie die Anzahl der neuen und verschwundenen Domains für jeden Lauf, ohne darauf zu reagieren. Ein paar Monate ruhiger Protokollierung geben Ihnen einen Bereich, der zu Ihrer Domain gehört und zu keiner anderen.

Sobald die Basislinie existiert, sticht eine einzelne schlechte Woche deutlich hervor, und Sie können den Unterschied erklären, ohne zu raten. Das ist der ganze Zweck der Basislinie.

Wählen Sie einen Alarm pro Signal

Jedes Signal in der Tabelle erhält einen Schwellenwert, einen Verantwortlichen und eine Aktion. Ein Signal mit drei Alarmen ist ein Signal, das niemand liest, und die Alarme werden gemeinsam ignoriert.

Schreiben Sie den Alarm neben sein Signal in den Code, damit die Tabelle auf dieser Seite und das Skript niemals widersprüchlich sind.

Überprüfen Sie die Grenzwerte vierteljährlich

Ihre Website wächst, und so auch ihr Normalzustand. Überprüfen Sie die Grenzwerte alle drei Monate und notieren Sie den Grund neben jeder Änderung, damit die Historie sich später selbst erklärt.

Lighthouse keeper scanning horizon with telescope and anchor on workbench

Die Schweregradtabelle in der Praxis lesen

Die Tabelle ist ein Triage-Hilfsmittel, kein Urteil. Jede Zeile zeigt Ihnen, wo Sie suchen müssen, und die Aktionsspalte hält Sie davon ab, in Panik eine Disavow-Datei zu erstellen.

Arbeiten Sie von oben nach unten. Die meisten Wochen enden bei Ignorieren oder Ansehen. Eine Zeile 'Ansehen' beginnt mit einigen Minuten Lesezeit, und eine Zeile 'Genau hinsehen' beginnt mit einer längeren Überprüfung der Anchors. Überspringen Sie keine Zeilen, nur weil die Woche geschäftig war. Eine übersprungene Zeile ist die Woche, in der der Überfluss unbemerkt bleibt.

Stichprobe vor der Entscheidung

Öffnen Sie zehn der markierten Domains und lesen Sie die Seiten. Ein Überfluss, der sich als ein einzelner Verzeichnis-Scraper herausstellt, ist ein anderes Problem als ein Überfluss an unabhängigen Blogs, und nur die Seiten unterscheiden sie.

Protokollieren Sie Ihre Entscheidung

Halten Sie eine Zeile pro Entscheidung fest: die Domain, die Stufe, was Sie geprüft haben und was Sie getan haben. Die nächste Person, die das Protokoll liest, einschließlich der zukünftige Sie, erhält die Begründung ohne Meeting.

Ein monatlicher Zusammenfassung dieser Zeilen kostet wenig Zeit und ist ein guter erster Entwurf für eine Überprüfung.

Was dies Ihnen nicht sagen kann

Es kann nicht beweisen, dass ein Link Ihnen schadet. Niemand außerhalb von Google kann das, und der Bericht über manuelle Maßnahmen in Search Console ist der einzige Ort, an dem eine Strafe angegeben wird.

Es kann auch keine Links sehen, die jünger sind als der letzte Refresh. Für frischere Beweise fragen Sie die Betreiber der verlinkenden Website oder lesen Sie Ihre Server-Logs für die Referrer. Unser Hinweis zum Timing geht tiefer.

Wenn Sie die Anchor-Seite wollen, kostet anchor_cloud 2 Credits und gruppiert Text nach Häufigkeit, was der schnellste Weg ist, um einen Exact-Match-Haufen zu erkennen.

Links, die zwischen den Refreshs eintreffen

Alles, was jünger ist als der letzte Refresh, fehlt auf beiden Seiten des Diffs. Ein Link, der innerhalb eines Refresh-Fensters erscheint und wieder verschwindet, wird überhaupt nicht angezeigt, weshalb der Vergleich monatlich durchgeführt werden sollte.

Anchors, die Ihnen falsch erscheinen

Ein Diff sieht die Domain, nicht den Satz um den Link herum. Zwei identische Anchors auf zwei verschiedenen Seiten können sehr unterschiedliche Bedeutungen haben, also halten Sie die Anchor-Prüfung als separaten, manuellen Schritt.

Speicheroptionen für ein Hobby-Setup

SQLite ist die einfachste Datenbank, die eine Diff-Frage immer noch mit einer einzigen Abfrage beantwortet. Sie lebt in einer einzigen Datei, sodass sie in das Repo oder einen Backup-Ordner passt, ohne einen Server zu benötigen.

Datumsbasierte JSON-Dateien funktionieren ebenfalls. Sie sind langsamer abzufragen, aber einfacher in einem Texteditor zu öffnen, wenn etwas falsch aussieht. Kopieren Sie den Speicher in beiden Fällen an einen zweiten Ort, bevor Sie etwas aufräumen, und bewahren Sie die Kopie für ein volles Quartal auf, bevor Sie etwas löschen.

Wenn eine Datei ausreicht

Eine Tabelle mit einer Spalte für den Tag deckt eine einzelne Website über Jahre ab. Die Datei bleibt klein, und die Abfragen auf dieser Seite benötigen keine Optimierung.

Wann Sie zu einem Server wechseln sollten

Sobald mehrere Personen in dieselbe Historie schreiben, wird eine Datei auf einer Maschine zum Flaschenhals. An diesem Punkt ist eine verwaltete Datenbank die ehrliche Wahl, und das Schema bleibt gleich.

Bis dahin ist eine Datei im Repo die einfachste Lösung, die einen Laptop-Wechsel überlebt.

Verdrahtung des Diffs mit einem wöchentlichen Job

Führen Sie diff.py direkt nach dem Schritt zum Erstellen des Snapshots aus. Drucken Sie die Counts aus und beenden Sie das Skript mit einem nicht-null-Code, wenn new einen von Ihnen gewählten Grenzwert überschreitet, sagen wir 200 in einer Woche für eine kleine Website. Der Job wird rot, und GitHub sendet Ihnen eine E-Mail. Einfach.

Wählen Sie den Grenzwert aus Ihrer eigenen Historie. Nach zwei Monaten wissen Sie, ob 15 neue Domains pro Woche normal sind oder ein Spike, und jede feste Zahl, die aus einem Blogbeitrag kopiert wurde, ist eine Vermutung.

Ruhige Wochen sind die Norm.

Fragen zu schlechten Links, klar beantwortet

Gibt es einen zuverlässigen Prüfer für schlechte Backlinks?
Kein Tool kann einen Link mit Sicherheit als schädlich kennzeichnen, da nur Google weiß, wie es jeden einzelnen behandelt. Ein Skript kann Muster aufzeigen, die es wert sind, gelesen zu werden: plötzliche Überflutungen, wiederholte Exact-Match-Anchors, seltsame TLDs. Sie treffen die Entscheidung, nachdem Sie die Seiten geöffnet haben.
Sollte ich das Disavowieren, was der Diff markiert?
Selten. Google hat gesagt, dass es Spam-Links weitgehend ignoriert, und eine Disavow-Datei ist für Fälle wie eine manuelle Maßnahme oder ein von Ihnen selbst verursachtes Paid-Link-Chaos gedacht. Dokumentieren Sie zuerst und prüfen Sie Search Console, bevor Sie etwas einreichen.
Wie oft sollte ich es ausführen?
Snapshot wöchentlich, Überprüfung monatlich. Der Index aktualisiert sich etwa einmal im Monat, daher vergleicht ein täglicher Diff meist eine Tabelle mit sich selbst. Eine monatliche Überprüfung passt zu den Daten und hält den Lärm niedrig.
Welche Spalten sollte die Tabelle behalten?
Behalten Sie den Tag, die Domain, das DR und eine Quellenspalte. Fügen Sie den Anchor nur hinzu, wenn Sie auch Anchors abrufen. Mehr Spalten wirken gründlich, aber jedes zusätzliche Feld ist ein weiteres, das zwischen den Läufen abweichen kann.
Kann ich zwei Suites gegeneinander diffen?
Sie können ihre Counts für dieselbe Website vergleichen, aber die beiden Ergebnisse werden nicht übereinstimmen. Führen Sie den Diff innerhalb einer Quelle durch und vergleichen Sie die Änderungsrichtung über Quellen hinweg, dieselbe Regel, die auf dieser gesamten Website überall gilt.
Was ist, wenn eine Domain verschwindet und im nächsten Monat zurückkehrt?
Sie wird als verschwunden und dann als neu angezeigt, was Lärm ist. Zählen Sie Rückkehrer separat oder vergleichen Sie drei Monate gleichzeitig, damit eine Domain, die für einen Refresh ausfällt, keine Überprüfung auslöst.