02Was gemessen wurde
Die Balken sind gezeichnet, nicht getippt: Jede Zahl steht als Text daneben und wird von Vorlesewerkzeugen genauso vorgelesen — der Balken ist nur die Abkürzung fürs Auge.
Punktzahlen — mehr ist besser
Lighthouse, Handy, Median aus 3 Läufen0 bis 100
Ladezeit94 / 100
Barrierefreiheit100 / 100
Technik73 vor den Korrekturen77 / 100
Auffindbarkeit100 / 100
Der senkrechte Strich markiert 90 — ab dort gilt ein Wert bei Google als gut. Warum die Technik bei 77 steht, steht unter Befund 1 und 2; die Ursache liegt nicht im Code dieser Seite.
Ladeverhalten — weniger ist besser
Jede Zeile hat ihre eigene SkalaStrich = Schwelle
Bis der Hauptinhalt stehtSkala 0–5 s · Schwelle 2,5 s2,15 s
Springt das Layout beim LadenSkala 0–0,25 · Schwelle 0,10,001
Blockierte BedienzeitSkala 0–600 ms · Schwelle 200 ms191 ms
Server-AntwortzeitSkala 0–600 ms · Schwelle 200 ms66 ms
Seitengewicht, alles zusammenSkala 0–600 KB · 19 Dateien261 KB
Die blockierte Bedienzeit liegt mit 191 ms nur neun Millisekunden unter der Schwelle — das ist die Zeile, die als nächste kippt. Die 66 ms sind am Server gemessen. Sechs Abrufe von einem Wohnanschluss aus streuten dagegen zwischen 59 und 609 ms — das ist die Leitung dorthin, nicht der Server. Deshalb steht hier der Median und nie ein Einzelwert: Wer den schlechtesten Abruf zitiert, schickt einen Betrieb wegen der eigenen WLAN-Qualität zum Hoster-Wechsel.
Was die 261 KB ausmacht
| Art | Dateien | Größe | Anmerkung |
| Schriften | 4 | 63 KB | Selbst gehostet, deshalb kein fremder Server |
| Skripte | 7 | 60 KB | Der größte Hebel, wenn wir kürzen wollen |
| Bilder | 2 | 57 KB | Porträt und Logo — mehr sind es nicht |
| Stile | 2 | 48 KB | Ein Stylesheet für 123 Seiten |
| Das HTML selbst | 1 | 28 KB | Komprimiert ausgeliefert |
Daraus gerechnet (SWDM3): rund 0,13 g CO₂ je Aufruf. Kein Selbstzweck — ein Nebenertrag des geringen Gewichts.
04Die Befunde, mit Beleg
Jeder Befund steht hier mit der Stelle, an der er sichtbar wird — Konsolenmeldung, Quelltextzeile oder Messwert. Ohne Beleg ist ein Befund eine Behauptung.
Handeln
Befund 1 · der teuerste
Die Zugriffsmessung läuft seit dem Einschalten nicht
Cloudflare fügt sein Analyse-Skript automatisch am Rand in jede ausgelieferte Seite ein — es steht dafür nicht im Quelltext. Unsere eigene Sicherheitsrichtlinie erlaubt Skripte aber nur von einer festen Liste, und static.cloudflareinsights.com steht nicht darauf. Der Browser weist das Skript ab, bevor es startet.
Beleg · Browser-Konsole beim Messlauf
Loading the script 'https://static.cloudflareinsights.com/beacon.min.js/…'
violates the following Content Security Policy directive:
"script-src 'self' 'unsafe-inline' https://challenges.cloudflare.com
https://www.googletagmanager.com https://*.google-analytics.com
https://app.cal.com"
Zwei Seiten, die beide recht haben, und niemand hat sie miteinander bekannt gemacht: Der Schalter im Cloudflare-Konto ist an, die Regel in _headers ist streng — und beides zusammen ergibt eine Messung, die nie eine Zahl geliefert hat.
Was es kostet
Keine Zugriffszahlen aus dieser Quelle — und in der Technik-Wertung zwei von drei Abzügen. Vier Punkte davon sind seit dem 9. September eingelöst, der Rest hängt am Bot-Schalter.
Behoben am 9. September 2026
static.cloudflareinsights.com steht jetzt in script-src und connect-src. Der Abzug für die verletzte Sicherheitsrichtlinie ist weg, die Technik-Wertung stieg von 73 auf 77. ⚠️ Auf DIESEM Mac zeigt die Messung weiter einen Fehler: Ein Werbeblocker versenkt die Domain im System-DNS. Am Resolver vorbei antwortet dieselbe Datei mit HTTP 200, für echte Besucher läuft die Messung.
Handeln
Befund 2
Drei veraltete Schnittstellen — keine davon aus unserem Code
Lighthouse zieht in der Technik-Wertung fünf Gewichtspunkte für veraltete Browser-Schnittstellen ab. Alle drei Meldungen stammen aus derselben Datei — und die gehört Cloudflares Bot-Erkennung, nicht dieser Seite.
Beleg · Lighthouse, Abschnitt „Uses deprecated APIs“
The Shared Storage API is deprecated …
StorageType.persistent is deprecated …
The Protected Audience API is deprecated …
Quelle (alle drei):
/cdn-cgi/challenge-platform/scripts/jsd/main.js
Warum das trotzdem hierher gehört
Ein Besucher merkt nichts davon, und der Code lässt sich nicht ändern — er kommt vom Netzbetreiber. Änderbar ist nur der Schalter, der ihn einspielt. Genau deshalb steht er unten in der Maßnahmenliste und nicht in der Ablage.
Handeln
Befund 3
Ein Cookie wird vor der Einwilligung gesetzt — und es ist nicht unseres
Beim bloßen Aufruf der Startseite, ohne jeden Klick, liegt genau ein Cookie im Browser — in fünf von fünf Aufrufen mit frischem Browserprofil nachgestellt. Es kommt aus derselben Ecke wie Befund 2.
| Name | Gesetzt von | Läuft bis | Zweck |
cf_clearance | Cloudflare, am Rand | 09.09.2027 | Merkt sich, dass der Besucher die Bot-Prüfung bestanden hat |
Das ist kein Tracking. Es misst nichts, es folgt niemandem über Seiten hinweg, und als Sicherheitsfunktion ist es nach § 25 Abs. 2 TDDDG ohne Einwilligung zulässig. Der Fehler liegt woanders: In der Datenschutzerklärung kommt es nicht vor — null Treffer. Wer ein Cookie setzt, muss es benennen, auch ein notwendiges.
Der Zusammenhang
Befund 1, 2 und 3 haben dieselbe Wurzel: Schalter im Cloudflare-Konto, die jemand einmal angehakt und nie wieder angesehen hat. Das ist der eigentliche Befund dieser Messung — und es ist derselbe Fall, den wir bei Mandanten regelmäßig finden.
Behoben am 9. September 2026
Das Cookie und Cloudflare Web Analytics stehen jetzt in der Datenschutzerklärung, mit Name, Zweck, Laufzeit und Rechtsgrundlage. Der Prüfer zählt es weiterhin als Cookie vor der Einwilligung, weil eine Messung „notwendig" nicht von „Tracking" unterscheiden kann. Das ist die Grenze der Messung, nicht ein offener Punkt.
Handeln
Befund 4
16 zu kleine Antippflächen — davon elf echte
Gemessen bei 390 px Breite: 16 bedienbare Elemente sind schmaler oder flacher als 44 px. Der Rohwert ist aber nicht der Befund — fünf davon sind Verweise mitten im Satz, und dafür gibt es in WCAG 2.5.8 eine ausdrückliche Ausnahme. Bleiben elf.
| Element | Anzahl | Gemessen | Einordnung |
| Menüpunkte im Ausklapper | 4 | 33 × 36 px | Der eigentliche Befund — beide Maße zu klein |
| Rechtszeilen im Menüfuß | 2 | 63 × 21 px · 38 × 21 px | Halbe Höhe — der zweite Befund |
| „Analyse starten“ im Menü | 1 | 42 × 47 px | 2 px zu schmal — kosmetisch |
| „Alle 13 Rechner ansehen“ | 1 | 193 × 42 px | 2 px zu flach — kosmetisch |
| Knöpfe im Cookie-Hinweis | 2 | 126 × 40 px | 4 px zu flach — und ausgerechnet hier zählt der Fehlgriff |
| „Zum Inhalt springen“ | 1 | 139 × 40 px | Erscheint nur bei Tastaturbedienung |
| Verweise mitten im Satz | 5 | 16–17 px hoch | Ausnahme nach WCAG 2.5.8 — kein Befund |
Der Punkt, an dem es wehtut
Vergrößert wird die Fläche, nicht die Schrift. Und die vier Menüpunkte mit 33 × 36 px sind der Weg durch die ganze Seite — wer dort danebentippt, landet auf einer Seite, die er nicht wollte.
Korrigiert und behoben am 9. September 2026
⚠️ Der Kern dieses Befundes war falsch, und zwar wegen der Messung: Die vier Menüpunkte mit 33 × 36 px waren der eingeklappte Ausklapper. Geöffnet, also in dem Zustand, in dem jemand sie antippt, sind sie über 44 px. Echt zu klein waren sechs andere Flächen, die haben jetzt 44 px. Der Prüfer zählt seither nur noch, was erreichbar ist, und nimmt Verweise im Fließtext aus: 16 gemeldete Flächen wurden zu einer, und die ist auch behoben.
Beobachten
Befund 5
87 % — was eine KI von der Startseite sieht
GPTBot, ClaudeBot und PerplexityBot führen kein JavaScript aus. Sie lesen das rohe HTML und kommen kein zweites Mal wieder. Was erst im Browser entsteht, existiert für sie nicht. Gemessen wird das, indem man die tragenden Wörter der sichtbaren Seite im ausgelieferten HTML sucht.
Die fehlenden 13 % haben zwei Ursachen, und die erste ist die ärgerliche: Das Zitatband oben auf der Startseite wird vom Browser zusammengesetzt. Aus 30 hinterlegten Fragen werden bei jedem Aufruf acht gemischt eingesetzt — im HTML steht keine einzige.
Beleg · Gegenprobe an der ausgelieferten Startseite
$ curl -s --compressed https://julianweisel.de/ | grep -c "händisch"
0
$ curl -s --compressed https://julianweisel.de/ | grep -c "Entschuldigung"
0
Im Browser sichtbar, im HTML nicht auffindbar:
„Warum machen wir Dinge noch händisch, die Software längst kann?“
„Verschicke ich den Link mit Stolz oder mit einer Entschuldigung?“
„Geben wir Rabatte nur, um den Auftrag nicht zu verlieren?“
Die zweite Ursache ist harmlos: Auch der Cookie-Hinweis wird im Browser gebaut. Dass „Ablehnen“ und „Akzeptieren“ nicht im HTML stehen, ist keinem Leser und keiner Maschine ein Verlust.
Ehrlich dazugesagt
Der Wert schwankt von Lauf zu Lauf, weil das Band jedes Mal andere acht Fragen zieht. 87 % ist eine Momentaufnahme, kein Fixpunkt — die Ursache dahinter ist es sehr wohl.
Behoben am 9. September 2026
Die acht Zitate stehen jetzt im ausgelieferten HTML. Sie werden beim Bauen aus main.js erzeugt, nicht abgetippt, damit es eine Quelle bleibt. Gemessen danach: 87 → 92 %. Was fehlt, ist der Einwilligungs-Hinweis und zwei Beschriftungen im Rechner. Ehrlich dazu: Die inhaltstragenden Texte standen immer schon im HTML, der Gewinn sind die stärksten Sätze der Marke, nicht eine vorher unsichtbare Seite.
Beobachten
Befund 6
Zwei geprüfte Profile — der Anker ist dünn
Im Betriebs-Schema stehen zwei bestätigte Profile. Daran erkennt eine Antwortmaschine, dass Google-Eintrag, Netzwerkprofil und Website denselben Menschen meinen.
Beleg · aus dem ausgelieferten HTML
"sameAs": [
"https://www.linkedin.com/in/hijulian/",
"https://www.google.com/maps/place/?q=place_id:ChIJtUwQtWhtd2oRsZ5pcgvQkPw"
]
Zwei ist wenig, aber jeder weitere Eintrag muss ein echtes, erreichbares Profil sein. Ein Link auf eine Plattform-Startseite ohne Profilnamen zählt nicht — er macht die Angabe schlechter, nicht länger. Und ein Kanal kommt hier nie dazu: Es gibt kein Twitter/X, also steht auch keines drin.
Entschieden
Befund 7
Keine antippbare Telefonnummer — weil es keine gibt
Die Prüfung sucht einen tel:-Verweis und findet keinen. Bei einem Handwerksbetrieb wäre das der teuerste Einzelbefund überhaupt — hier ist es eine Entscheidung: Auf dieser Seite steht nirgends eine Telefonnummer, auch nicht im Impressum. Erreichbar sind wir per E-Mail und über das Formular, und § 5 DDG verlangt einen schnellen elektronischen Weg, keine Rufnummer.
Warum es trotzdem rot gemessen wird
Eine Messung kann „fehlt“ nicht von „so gewollt“ unterscheiden. Genau dafür steht neben jeder Zahl ein Mensch, der sie einordnet — sonst produziert ein Bericht Maßnahmen gegen Entscheidungen.
Messfehler
Befund 8 · gegen uns selbst
„FAQ nicht ausgezeichnet“ war falsch — der Prüfer sah nur eine Seite
Der Lauf meldete: keine ausgezeichneten Frage-Antwort-Paare. Das stimmt für die Startseite — dort gibt es keine. Nachgesehen, wo die Fragen tatsächlich stehen:
Beleg · /fragen, im ausgelieferten HTML
"@type": "FAQPage" → vorhanden
"@type": "Question" → 12 Stück
Sichtbare Aufklapper → 12 Stück
────────────
12 von 12 ausgezeichnet
Die Prüfung hat also nicht die Seite bewertet, sondern sich selbst — sie schaute nur auf die Startseite und nannte das Ergebnis einen Befund. Der Prüfer ist nachgeschärft, er sieht jetzt auch die Unterseiten an. Frage-Antwort-Paare haben von allen Schema-Arten die höchste Zitierwahrscheinlichkeit; ein falscher Alarm an dieser Stelle hätte teuer werden können.
Beobachten
Befund 9 · diese Seite hier
Beim ersten Laden springt diese Seite — die Startseite tut es nicht
Beim Nachmessen der fertigen Seite kam heraus: 0,110 Layoutsprung (Median aus drei Läufen), Schwelle ist 0,1. Die Startseite liegt bei 0,001. Der Unterschied ist der Aufbau: Dort steht jeder Abschnitt in einer bildschirmhohen Fläche, hier läuft der Text durch. Wenn die Seite kurz nach dem Zeichnen die Sprache tauscht, ändert der lange Absatz oben seine Zeilenzahl — und alles darunter rutscht.
Beleg · Lighthouse, größter Einzelsprung
0,1044 section.rep „AS OF · Measured on 9 September 2026 …"
0,0049 .stand-banner p
0,0003 .analyse-cta-float
─────────────────────────────────────────────
0,110 gesamt · Schwelle 0,1 · Startseite 0,001
Zwei Drittel des Sprungs waren vorher schon weg: Die Startseite lädt ihre beiden Hauptschriften vor, diese Seite tat es nicht — bis der Tausch von Ersatz- auf echte Schrift jeden Absatz umbrach (0,283 vor dem Vorladen, 0,110 danach). Der Rest ist der Sprachtausch.
Warum das hier steht und nicht stillschweigend verschwindet
Ein Bericht, der Sprünge als Befund abbildet und den eigenen verschweigt, ist keiner. Der saubere Weg ist, die Sprache festzulegen, bevor gezeichnet wird — Beide Versuche hatten das Skript nur früher geladen — es stand weiter am Seitenende. Es genügte, es an die Stelle zu setzen, wo der springende Kasten steht. Siehe den grünen Vermerk darunter.
Vorgeschichte: zweimal versucht, zweimal gemessen, zweimal daneben
Erster Versuch: den Sprachtausch sofort ausführen statt auf das fertige Dokument zu warten. Zweiter Versuch: das Skript im Kopf vorladen, damit keine Wartezeit auf die Datei entsteht. Beide Male blieb der Wert exakt bei 0,110 — der Browser zeichnet die Seite, sobald genug davon geparst ist, und das ist lange vor jedem Skript am Seitenende. Beide Änderungen sind trotzdem geblieben, sie sind für sich sauberer. Und eine Klarstellung, die vorher fehlte: Der Sprung trifft englische Besucher, nicht alle. Wer die Seite auf Deutsch bekommt, sieht keinen Tausch und keinen Sprung. Ein echter Fix hieße, beide Sprachfassungen so auszuliefern, dass gar kein Text ausgetauscht wird — das ist ein Umbau über neunzehn Seiten und kein Nachtrag.
Behoben am 10. September 2026
Der Sprung hatte eine einzige Ursache: lang.js stand am Seitenende und tauschte den Stand-Kasten oben erst NACH dem ersten Zeichnen. Auf Englisch ist dieser Kasten eine Textzeile kürzer — 20 px, und alles darunter rutschte nach. Gemessen kamen 0,1044 von 0,1099 des Sprungs aus genau diesem Kasten. Das Skript steht jetzt direkt hinter dem Kasten: Dort ist er geparst, der Rest der Seite noch nicht — getauscht wird also vor dem ersten Bild. Gemessen: 0,110 → 0,009.
05Gefunden werden, wenn niemand mehr sucht
Immer mehr Menschen tippen ihre Frage nicht bei Google ein, sondern fragen eine KI. Die Antwort nennt zwei, drei Betriebe — und wer nicht dabei ist, taucht gar nicht auf. Vier Dinge entscheiden darüber, und drei davon erklärt sonst niemand.
Eine Auskunft statt zwölf
Jede Seite trägt maschinenlesbar, wer hier arbeitet. Steht das auf zwölf Seiten zwölfmal ohne gemeinsame Kennung, sieht eine Antwortmaschine zwölf verschiedene Betriebe und zitiert im Zweifel keinen. Hier gibt es eine Definition mit fester Kennung, alle Unterseiten verweisen darauf. Über die Bestandsprojekte gemessen ist das die Ausnahme, nicht die Regel — eine Seite im Portfolio kam auf zehn Definitionen und null Kennungen.
KI-Crawler führen kein JavaScript aus
Das ist der Satz, an dem die meisten modernen Seiten scheitern: Was erst der Browser zusammenbaut, sieht ein KI-Crawler nie. Er liest rohes HTML und kommt nicht wieder. Deshalb ist die Kennzahl aus Befund 5 die zentrale — und deshalb ist ein hübscher Rechner, der erst im Browser entsteht, für eine Antwortmaschine eine leere Seite.
llms.txt — ehrlich eingeordnet
Diese Seite hat eine /llms.txt, und sie wird beim Bauen erzeugt statt von Hand gepflegt — eine zweite Datei, die man nachziehen muss, läuft nach dem ersten Umzug auseinander. Was sie nicht ist: ein Sichtbarkeits-Werkzeug. Der überwiegende Teil aller llms.txt wird nie abgerufen, Google liest sie nicht. Sie zählt für Werkzeuge, die gezielt darauf zugreifen — nicht für Zitierungen. Wer sie als Reichweiten-Maßnahme verkauft, verkauft eine Behauptung ohne Beleg.
Nichts erfunden
Im Schema dieser Seite steht keine Sternebewertung und keine Preisspanne — beides ließe sich in zwei Minuten hinschreiben und würde in Suchergebnissen gut aussehen. Erfundene strukturierte Daten sind aber schlimmer als fehlende: Google straft sie ab, und eine KI gibt sie als Tatsache weiter. Was hier steht, ist belegt oder es steht nicht da.
Und die Frage, die wir uns selbst noch nicht beantwortet haben
In der robots.txt steht ein Content-Signal: Suchindex, KI-Abruf und KI-Training sind drei getrennte Erlaubnisse, und das gilt zugleich als Rechtevorbehalt nach § 44b UrhG. Die dritte davon ist eine echte Abwägung — ein KI-Crawler holt tausendfach mehr Seiten, als er Besucher zurückschickt. Wer aber gar nicht im Trainingsmaterial vorkommt, ist der Maschine womöglich unbekannt. Diese Entscheidung gehört dem Betrieb, nicht dem Dienstleister.