Eine Domain, die nicht auf eine Parkseite zeigt
Die Domain lag lange bei einer Parkseite des Anbieters: „Diese Domain wurde soeben freigeschaltet.“ Wer die Adresse aus meinem Lebenslauf eintippte, sah etwas Angefangenes, das liegengeblieben war. Deshalb ist die Profilseite die Hauptdomain selbst geworden und keine Unteradresse.
Mein Anschluss hat keine feste IP-Adresse. Die FRITZ!Box meldet jede neue Adresse per DynDNS an den Anbieter. Der erlaubt in meinem Paket aber nur einen nachgeführten Namen. Das Einschalten für die Hauptdomain hatte den Vokabeltrainer still abgeschaltet, sichtbar nur an Fehlermeldungen im Protokoll der FRITZ!Box. Die Lösung ist sauberer als zwei nachgeführte Namen: Nur die Hauptdomain wird nachgeführt, alle anderen Namen zeigen per CNAME auf sie.
Prüfen, ob die Nachführung arbeitet
Ob DynDNS wirklich funktioniert, zeigt sich erst beim nächsten Wechsel der Adresse, und der kommt oft erst nach Wochen. Bis dahin sehen ein fester und ein nachgeführter Eintrag von außen gleich aus. Ein kleines Skript vergleicht deshalb die tatsächliche öffentliche Adresse mit dem DNS-Eintrag.
- Die öffentliche Adresse fragt es bei zwei unabhängigen Diensten ab und meldet nur, wenn beide dasselbe sagen. Sonst löst ein hakelnder Dienst einen Fehlalarm aus.
- Fällt die Internetverbindung aus, meldet es „unklar“ statt „Abweichung“, denn das ist ein anderes Problem.
- Gegengeprüft mit einer fremden Domain: Das Skript meldete die Abweichung. Ein Prüfwerkzeug, das immer „OK“ sagt, sieht im Normalbetrieb genauso aus wie ein funktionierendes.
Ein Baukasten mit eingebauter Prüfung
Gestaltung und Baukasten stammen aus einem zweiten Webprojekt von mir. Kopf- und Fußzeile stehen genau einmal im Quelltext, ein Node.js-Skript setzt daraus die Seiten zusammen und prüft das Ergebnis, bevor etwas hochgeladen wird:
| Prüfung | Was sie verhindert |
|---|---|
| Icons | ein Symbol, das auf der Seite fehlt |
| Links und Sprungmarken | einen Link ins Leere, auch auf Abschnitte anderer Seiten |
| Vorlagenreste | Platzhaltertexte und Reste aus der ursprünglichen Vorlage |
| Fremde Server | alles, was der Browser beim Laden von einer anderen Domain holen würde |
| Zahlen ohne Beleg | jede Zahl ab zwei Stellen, die nicht mit Quelle in einer Belegliste steht |
Die letzte Prüfung gibt es, weil eine frühere Vorlage Zahlen wie „85 Prozent aller Störungen“ enthielt, ohne jede Quelle. Dass eine Zahl eine Quelle hat, heißt noch nicht, dass die Aussage stimmt. Deshalb habe ich für diese Fassung zusätzlich jede Projektseite gegen meine Projektnotizen gelesen und dabei zwei Fehler auf der alten Seite gefunden und korrigiert. Bevor das Skript prüft, prüft es sich selbst an einem absichtlich kaputten Beispiel. Schlägt diese Kontrolle nicht an, bricht es ab. Sonst wäre „keine Befunde“ wertlos.
Am Handy gemessen, nicht nur angesehen
Jede Seite wird bei fünf Breiten von 320 bis 1280 Pixeln gemessen: Ragt etwas über den Rand, sind Schaltflächen groß genug, wird die richtige Schrift gezeichnet. Gemessen wird in einem Rahmen fester Breite, nicht per Bildschirmfoto.
Der erste Handy-Screenshot zeigte rechts abgeschnittenen Text. Die Ursache war nicht die Seite: Der Browser im Hintergrundbetrieb rendert bei schmalen Fenstern in Wahrheit breiter und beschneidet nur das Bild. Nachgewiesen habe ich das mit einer Testseite, die ihre eigene Breite ausgibt. Seitdem messe ich schmale Breiten nur noch so.
Technik
| Teil | Womit |
|---|---|
| Server | nginx auf dem Raspberry Pi 5, Let's Encrypt, HTTP leitet auf HTTPS um |
| Domain | DynDNS über die FRITZ!Box, weitere Namen als CNAME, eigenes Prüfskript |
| Seiten | HTML und CSS, Schriften Fraunces und Public Sans vom eigenen Server, wenig JavaScript für das Menü |
| Bau | Node.js-Skript ohne Pakete: zusammensetzen und prüfen |
| Statistik | Auswertung der Serverprotokolle, keine Cookies, kein Skript im Browser |