fix(seo): Sicherheits-Header, strukturierte Daten, llms.txt und 404-Seite #98
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "fix/security-header-und-schema"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #84
Refs #59
Sicherheits-Header, ohne sie durch Inline-Code zu entwerten
Die Seite lieferte weder HSTS noch CSP, Referrer-Policy oder Permissions-Policy,
dafür
X-Powered-By: Craft CMSauf jeder Antwort.Drei Dinge daran waren nicht offensichtlich:
nginx vererbt Kopfzeilen nicht. Sobald ein Block eine eigene setzt, verliert
er alle der Ebene darüber. Sie liegen deshalb in einem Baustein, der pro Block
eingebunden wird.
Die CSP lässt sich nicht per Block ausnehmen. Jede Seite läuft über den
PHP-Block, weil der Haupt-Router dorthin weiterreicht, und nginx wertet die
Kopfzeile im Ziel-Block aus. Eine Ausnahme für
/adminüber einen eigenen Blockwar messbar wirkungslos. Der Wert kommt jetzt aus einer Zuordnung; leer heißt,
die Kopfzeile entfällt.
Eine CSP mit
unsafe-inlinebei Skripten wäre Theater. Das einzigeInline-Skript der Seite war der Matomo-Aufruf. Er liegt jetzt im JS-Bundle und
liest seine Konfiguration aus Datenattributen. Für Stile bleibt
unsafe-inline,weil die Seite an 44 Stellen berechnete Stilattribute setzt und Stil-Injektion
ohne Skriptausführung kaum Schaden anrichtet.
HSTS gilt ein Jahr, ohne Subdomain-Klausel und ohne preload:
raven.,cal.undanalytics.philflow.iosollen sich nicht über diese Seite aussperren können.Der Rest von #84
Sprachfassungen, die es nicht gibt, und durfte eine Stunde lang öffentlich
zwischengespeichert werden. Jetzt
noindex, kein Canonical, keineSprachverweise,
no-store.Website auf jeder Seite. Die FAQ der Startseite bleibt bewusst Microdata, sie
zweimal auszuzeichnen wäre eine Fehlerquelle. Aus demselben Grund fällt die
Microdata am Artikel weg. Am Artikel-Schema außerdem: Bild-URL war relativ
(Google verwirft das), Herausgeber war eine Person statt der Organisation, die
Profillinks stimmten mit nichts überein, leere Felder landeten als
null.llms.txtbeschrieb nur das Blog, während die Seite Prozessautomatisierungverkauft. Neu gefasst aus dem, was die Seite tatsächlich sagt, zweisprachig.
llms-full.txtfällt weg: 417 Zeilen alte Positionierung, nirgends verlinkt.Was ein Prüfagent gefunden hat, und was ich selbst fand
Die Schrägstrich-Umleitung erzeugte an jedem Verzeichnis eine Endlosschleife:
/assets/images/ging auf die schrägstrichlose Form, dort fand nginx einVerzeichnis und forderte per eigenem 301 die Schrägstrich-Form zurück. Aus einem
403 wurde
ERR_TOO_MANY_REDIRECTS. Behoben.Die Person Philipp Lütje war auf Artikelseiten zweimal mit widersprüchlichen
Namen definiert. Und Organisation wie Person hingen an der jeweils aktuellen
Sprache,
/en/trug also eine eigene Kennung: dieselbe Firma erschien als zweiEntitäten. Beide hängen jetzt an der Hauptsite.
Selbst gefunden: der Matomo-Start lag nur im Quellcode, nicht im gebauten Bundle.
Ohne den Build wäre die Reichweitenmessung still ausgefallen. Dazu drei
Absturzursachen im Vorschaubild-Rückfall, alle behoben und nachgemessen.
Gemessen, nicht angenommen
/assets/images/löst sich nach genaueiner Umleitung in 404 auf, keine Schleife
X-Powered-Byweg/adminbekommt korrekt keine CSP, Craft setzt dort seine eigeneSkript-Hosts, keine
data:- oderblob:-Quellen, keinevalim Bundlenull-Werte, alle Bild-URLs absolut, 404 trägt korrekt keinsllms.txtliefern 200Nicht geprüft: die CSP im echten Browser gegen die laufende Konfiguration.
Der Prüfagent kam nicht an den Browser, und der lokale nginx lief noch mit der
alten Konfiguration. Die Quelltextanalyse über sechs Seitentypen ist eindeutig,
aber das ersetzt keinen Konsolenlauf. Wird direkt nach dem Deploy live
nachgeholt; findet sich dort etwas, ist die Kopfzeile in einer Minute wieder
entschärft.
Offen gelassen (P3): selbst gebaute Umleitungen nehmen den vom Besucher
geschickten Host. Kein offener Redirect, aber unsauber. Und
//liefert weiter200 statt umzuleiten, das ist Altbestand.
🤖 Generated with Claude Code
https://claude.ai/code/session_01VyiQJ8BM3hcqH3E3sPvg1N
Die Datei ist das erste, was ChatGPT und Perplexity lesen, wenn sie ueber Philflow Auskunft geben. Sie beschrieb bis heute nur das Blog: sechs Artikel und eine Sitemap, kein Wort ueber Automatisierung, Kunden, Pakete oder Preise. Die Seite verkauft aber Prozessautomatisierung im Mittelstand. Neu gefasst aus dem, was die Seite tatsaechlich sagt: Positionierung, die drei selbst gebauten Belege, die Preisstaffel, dann das Blog. Zweisprachig, mit den englischen Artikeln. Alle Buchungslinks zeigen auf raven.ceo, und die Datei sagt ausdruecklich, dass es keine Kontaktseite gibt. llms-full.txt faellt weg: 417 Zeilen alte Agentur-Positionierung ("AI-Betriebssysteme fuer den Mittelstand", "Intelligence Platform"), nirgends verlinkt, eine zweite Wahrheit neben der ersten. Die nginx-Regel deckt jetzt nur noch die eine Datei ab. Refs #84 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VyiQJ8BM3hcqH3E3sPvg1N