Aus der Maschine: Der Newsletter, der seine eigenen Links prüft

← ZUR STARTSEITE ROCKSTRATEGE.COM

ROCKSTRATEGE  ·  EGEKID · AUS DER MASCHINE

AUSGABE VOM 04.09.2026

Der Newsletter, der seine eigenen Links prüft.

Eine Geschichte aus meinem eigenen Maschinenraum — darüber, wie ein falscher Button zu einem Wächter führte, und was der Wächter erst beim zweiten Anlauf konnte.

Am vergangenen Dienstag um sechs Uhr früh ging dieser Newsletter mit „Grün ist kein Beweis“ raus. Unter dem Block ein Button, der die Geschichte versprach — und auf meinem Projektanfrage-Formular landete. Um 07:03 hatte ich es selbst im Postfach. Mein erster Satz: „Das geht gar nicht.“

Die Ursache: eine Lücke, kein Tippfehler. Meinen Newsletter baut jeden Werktag ein Generator — Recherche, Bausteine, Qualitäts-Gate, Versand. Für Dossier und Prompt des Tages legt er eigene Seiten an, für diese Rubrik hatte ich das nie vorgesehen. Also zeigte der Button aufs nächstbeste Formular — gegen meine eigene Hausregel: Was ein Button verspricht, muss hinter dem Klick liegen.

Um 07:12 war die Geschichte als eigene Seite online, plus ein Hinweis auf dem Formular für alle, die schon dort waren. Aber ein Fix repariert nur den Dienstag. Seitdem sitzt ein Wächter im Generator: Jeder Link des Rubrik-Blocks wird vor dem Versand gegen eine kurze Liste erlaubter Ziele geprüft — meine Story-Seiten, meine PDF-Handouts, mein Podcast. Ein Verstoß blockt nicht den Block, sondern den gesamten Versand, mit roter Warnung. Bewusst hart. Vorher musste er neun Gift-Tests bestehen, absichtlich kaputte Fälle: Formular geblockt, E-Mail-Link geblockt, PDF und Story durchgelassen. Neun von neun — und die eingebaute Fassung byteidentisch mit der getesteten.

Und dann der Teil, der mich mehr ärgerte als der Fehler: Zwei ältere Ausgaben hatten bewusst auf ein Formular gezeigt — ehrlich angekündigt, von mir freigegeben. Der neue Wächter hätte beide geblockt, er kannte meinen eigenen Bestand nicht. Den Einwand musste ich bringen; der Lösungsansatz hätte von der Technik kommen müssen. Seitdem gilt: Erst die legitimen Bestandsfälle inventarisieren, dann die Regel bauen — Ausnahmen als ausdrückliche Flags einplanen. Wächter v2: zwölf von zwölf Gift-Tests, wieder byteverifiziert.

🔎 Der Blick durch die Rockstratege-Brille: Eine Regel ohne Wächter ist nur ein Wunsch. Null Befunde beweisen nichts — ein Wächter ist erst abgenommen, wenn er Gift geschluckt und ausgespuckt hat. Und seit Dienstag: Ein Wächter, der deine legitimen Fälle nicht kennt, ist kein Schutz, sondern der nächste Vorfall.

ZUM NACHBAUEN · FÜNF SCHRITTE

So sitzt der Link-Wächter in deinem Generator.

Generisch für n8n, Zapier oder Make. Domains, Feldnamen und Muster sind Platzhalter — ersetz sie durch deine eigenen.

  1. Bestand inventarisieren — zuerst, nicht zuletzt. Alle bisher verschickten Buttons und Links deiner Rubrik auflisten: Wohin zeigten sie, und war das jeweils gewollt? Was legitim war, ist keine Ausnahme, sondern eine Anforderung an die Regel. Ergebnis: eine Liste erlaubter Zielmuster plus die bewussten Sonderfälle mit Begründung.
  2. Allowlist statt Verbotsliste. Erlaubte Ziele als Muster hinterlegen — eigene Story-Seiten, eigene PDF-Uploads, die Podcast-Seite. Alles, was auf kein Muster passt, ist verboten; das schließt E-Mail-Links (mailto:) und fremde Domains automatisch ein. Für die Sonderfälle aus Schritt 1 ein Flag pro Baustein (z. B. formularOk: true), das nur bei der Freigabe gesetzt wird: Mit Flag sind Ziele auf eigenen Domains erlaubt, E-Mail-Links und Fremdziele bleiben auch dann tabu.
  3. Prüfschritt direkt vor dem Versand. Ein Code-Schritt (n8n: Code-Node · Zapier: „Code by Zapier“ · Make: Text-Parser + Router) zieht alle href aus dem Block, prüft sie gegen die Muster und schreibt bei Verstoß einen Fehler in die Daten. Der Versand-Schritt läuft nur, wenn das Fehlerfeld leer ist (IF/Filter davor). Wichtig: bei Verstoß den ganzen Versand stoppen, nicht nur den Block weglassen — sonst merkst du es nie.
    // n8n Code-Node („Run Once for All Items"), unmittelbar vor dem Versand-Schritt
    const ALLOW = [
      /^https:\/\/deine-domain\.de\/story-[a-z0-9-]+\/?$/i,            // eigene Story-Seiten
      /^https:\/\/deine-domain\.de\/wp-content\/uploads\/\S+\.pdf$/i, // eigene PDF-Handouts
      /^https:\/\/deine-domain\.de\/podcast\/?$/i,                     // Podcast-Seite
    ];
    const OWN = /^https:\/\/deine-domain\.de\/\S*$/i; // greift NUR bei deklarierter Ausnahme
    
    const block = $input.first().json; // { html: "<tr>…</tr>", formularOk: false }
    const hrefs = [...block.html.matchAll(/href="([^"]+)"/g)].map(m => m[1]);
    const bad = hrefs.filter(u =>
      block.formularOk === true ? !OWN.test(u) : !ALLOW.some(re => re.test(u))
    );
    
    if (bad.length) {
      // Versand stoppen: Fehler nach vorn reichen, Block NICHT einbauen
      return [{ json: { ...block, qaError: 'Link-Wächter: Ziel nicht erlaubt: ' + bad.join(', ') } }];
    }
    return [{ json: block }];

    Danach ein IF-Node: {{ $json.qaError }} leer → Versand; sonst → Alarm an dich (und kein Versand).

  4. Gift-Tests, bevor es live geht. Den Prüf-Code lokal (z. B. mit Node.js) gegen absichtlich kaputte Fälle laufen lassen — jeder Fall ein eigener Test: Formular-Link → muss rot werden · E-Mail-Link → rot · PDF und Story-Seite → grün · Tag ohne Rubrik → nichts passiert · Flag gesetzt + Formular → grün · Flag gesetzt + fremde Domain → rot. Erst wenn du Rot gesehen hast, ist der Wächter abgenommen. Null Befunde auf gesunden Daten beweisen nichts.
  5. Eingebaute Fassung gegen die getestete prüfen. Nach dem Einbau den Code aus der Plattform wieder exportieren und mit der lokal getesteten Datei vergleichen (diff oder Prüfsumme). Was du getestet hast, muss exakt das sein, was läuft — sonst hast du etwas anderes abgenommen, als du betreibst.

Du willst Automatisierungen, die sich selbst prüfen, bevor etwas rausgeht — in deinem eigenen Betrieb? Erzähl mir von deinem Projekt →

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert


Der Zeitraum für die reCAPTCHA-Überprüfung ist abgelaufen. Bitte laden Sie die Seite neu.

Ich verwende auf dieser Website nur Cookies für grundlegende Funktionen – etwa um deine Cookie-Einstellung zu speichern – sowie für eingebundene Inhalte externer Dienste. Analyse- oder Werbe-Cookies setze ich nicht ein, und ich gebe keine Daten an Partner für soziale Medien, Werbung oder Analysen weiter; die Reichweitenmessung erfolgt cookielos. Details in der Datenschutzerklärung.
Mehr Infos
Cookies settings
Annehmen
Cookie-Einstellungen
Privacy & Cookies policy
Cookie name Active
Diese Website verwendet Cookies für grundlegende Funktionen und eingebundene Inhalte externer Dienste. Details und deine Rechte: siehe Datenschutzerklärung.
Save settings