Das Problem: Eine Website checken = 8 Tools öffnen
Als Software-Agentur prüfen wir bei Enjyn ständig Websites. Bei Erstgesprächen mit potenziellen Kunden, bei bestehenden Projekten, vor Übergaben, nach Releases. Die Frage ist immer dieselbe: Ist diese Website technisch sauber, DSGVO-konform und sicher?
Die Antwort findet sich in keinem einzelnen Tool:
| Aspekt | Tool das wir bisher öffneten |
|---|---|
| Performance | Google PageSpeed Insights, GTmetrix |
| Security Headers | securityheaders.com |
| SSL-Zertifikat | SSL Labs |
| SEO | Ahrefs / Screaming Frog / Mangools |
| DSGVO-Check | manuell |
| Cookie-Banner | manuell |
| Schema.org | Google Rich Results Test |
| Mobile | PageSpeed Mobile |
Acht Tools für einen Website-Check. Jedes mit eigener UI, eigenen Bewertungslogiken, eigenen Reports. Bei zwanzig Websites am Tag ist das ein halber Arbeitstag nur fürs Hin- und Herklicken.
Wir wollten ein Tool, das alles auf einmal macht — speziell für den DACH-Markt mit DSGVO-Fokus.
Die Frage: Können wir das selbst bauen?
Bestehende All-in-One-Tools gibt es. Aber:
- Die meisten sind englischsprachig und ignorieren deutsche Rechtsanforderungen (Impressumspflicht §5 TMG, DSGVO-Cookie-Regeln, Google Fonts Schrems II)
- Viele sind kostenpflichtige SaaS ab 50€/Monat
- Die kostenlosen geben nur Teil-Reports und wollen dich in einen Funnel zwingen
Was wir wollten:
- Eine URL rein, vollständiger Report raus
- DSGVO-zentrisch (Impressum, Datenschutz, externe Fonts, Tracking-ohne-Consent)
- Kostenlos, ohne Registrierung
- Objektive Bewertung — keine subjektiven Faktoren
Also haben wir uns hingesetzt und den Enjyn Crawler gebaut. Heute prüft er über 50 Faktoren in einem einzigen Scan.
Was wir prüfen — die 50+ Checks
Vier Kategorien, jede mit konkreten technischen Tests:
Sicherheit (14 Checks)
HTTPS/SSL, HSTS Header, CSP Header, X-Frame-Options, X-Content-Type, Referrer-Policy, Permissions-Policy, security.txt, Mixed Content, CSRF-Schutz, Server-Info Leakage, PHP-Version exposed, sensible Dateien (.env, .git), WP User Enumeration.
SEO (15 Checks)
robots.txt, sitemap.xml, llms.txt, Meta-Title (10-70 Zeichen), Meta-Description (50-160 Zeichen), Canonical URL, H1-H6 Struktur, Open Graph, Twitter Cards, Schema.org, Favicon, Alt-Texte, interne/externe Links, Wortanzahl.
Rechtliches/DSGVO (12 Checks)
Impressum, Datenschutzerklärung, AGB, Widerruf, Cookie-Banner, Cookie-Richtlinie, Google Fonts (Schrems II!), Google Analytics, Facebook Pixel, Tracking ohne Consent, TMG/DDG-Prüfung, Kontaktdaten.
Performance & Mobile (13 Checks)
Ladezeit, Seitengröße, GZIP/Brotli, HTTP/2, DOM-Größe, Ressourcen-Anzahl, Bilder, Scripts, Stylesheets, Third-Party Requests, Viewport, Skip-Link, ARIA Landmarks.
Der Stack — komplett offen
Im Gegensatz zum KYC-Artikel müssen wir hier nichts verstecken — der Crawler ist Open-Approach, es gibt keinen Anti-Fraud-Grund für Geheimhaltung:
Sprache: Python 3.11+
Web-Framework: Flask
HTTP-Client: httpx (statt requests — async + HTTP/2)
HTML-Parser: BeautifulSoup4 + lxml
Spracherkennung: Lingua (AI-basiert, 95%+ Genauigkeit)
Datenbank: SQLite (Scans werden temporär gespeichert)
WSGI: Gunicorn
Bewusst kein Headless Browser (Puppeteer/Playwright). Warum? Geschwindigkeit. Ein vollständiger Scan dauert bei uns 2-8 Sekunden statt 30-60 Sekunden bei Lighthouse-basierten Tools.
Das geht, weil wir bewusst nicht jedes JavaScript ausführen. Wir analysieren das gelieferte HTML, Headers und statische Assets — das deckt 95% der relevanten Probleme ab. Die fehlenden 5% (z.B. Runtime-Performance) sind genau die, für die du PageSpeed Insights eh weiter brauchst.
Beispiel: SSL-Check
So sieht der SSL-Check unter der Haube aus:
import ssl
import socket
def check_ssl(domain):
context = ssl.create_default_context()
with socket.create_connection((domain, 443), timeout=5) as sock:
with context.wrap_socket(sock, server_hostname=domain) as ssock:
cert = ssock.getpeercert()
# Ablaufdatum extrahieren
not_after = cert['notAfter']
expires = datetime.strptime(not_after, '%b %d %H:%M:%S %Y %Z')
days_left = (expires - datetime.utcnow()).days
if days_left < 14:
return {'status': 'critical', 'days': days_left}
elif days_left < 30:
return {'status': 'warning', 'days': days_left}
else:
return {'status': 'ok', 'days': days_left}
Kein Hexenwerk. Nur Python-Standardbibliothek. Die meisten unserer 50+ Checks sind ähnlich straightforward — der Aufwand lag nicht im Einzelcheck, sondern im Sammeln aller Edge-Cases, die in deutschen Websites real auftreten.
Beispiel: Google Fonts Detection (Schrems II!)
Ein Check, der erst seit Schrems II 2020 wirklich wichtig ist:
def check_google_fonts(html):
# Schrems II: Google Fonts ohne Consent = DSGVO-Verstoß
# (LG München, Urteil vom 20.01.2022, Az. 3 O 17493/20)
indicators = [
'fonts.googleapis.com',
'fonts.gstatic.com',
'@import url\\(.*fonts\\.google'
]
for pattern in indicators:
if re.search(pattern, html, re.IGNORECASE):
return {
'status': 'critical',
'reason': 'Google Fonts wird extern geladen',
'risk': 'IP-Übertragung in die USA ohne Consent',
'fix': 'Self-Hosting der Fonts oder Consent vor Laden'
}
return {'status': 'ok'}
Das ist ein typischer Crawler-Check, den kein internationales Tool macht, weil das Rechtsproblem deutsch-spezifisch ist.
Das Scoring: eRate + eTrust
Statt eine einzige "Note" zu geben, splitten wir das Ergebnis bewusst in zwei Bewertungen:
eRate — Technische Qualität (0-100%)
| Kategorie | Max. Punkte |
|---|---|
| Sicherheit | 30 |
| Datenschutz & Rechtliches | 25 |
| SEO & Auffindbarkeit | 25 |
| Performance | 20 |
eTrust — Vertrauenswürdigkeit (0-100%)
| Faktor | Punkte |
|---|---|
| SSL/HTTPS | 15 |
| Impressum | 15 |
| Datenschutzerklärung | 12 |
| Kontaktinformationen | 10 |
| Keine Malware-Indikatoren | 10 |
| Sichere Formulare | 8 |
| Professionelles Erscheinungsbild | 8 |
| Transparenz | 7 |
Warum zwei Werte? Weil eine Website technisch perfekt sein kann (eRate A+), aber unseriös wirken (kein Impressum, kein Kontakt → eTrust D). Beide Aspekte sind für Besucher relevant — und werden mit nur einem Score vermischt.
Was wir bewusst NICHT machen
Keine echte Performance-Messung im Browser. Wir messen Server-Response-Time und Asset-Größen, nicht Time-to-Interactive oder Largest Contentful Paint. Dafür gibt es PageSpeed Insights — wir wollten nicht der zweite sein, sondern die anderen 95% abdecken.
Keine Penetration Tests. Wir scannen passiv. Kein Brute-Force, kein Port-Scanning, kein SQL-Injection-Test. Das wäre ohne Erlaubnis des Website-Betreibers illegal.
Keine englischsprachigen Websites. Wir erkennen die Sprache der Website automatisch (via Lingua + HTML lang-Attribut) und führen den vollständigen Scan nur für deutschsprachige Websites durch. Internationale Seiten bekommen einen reduzierten Report.
Keine Hidden-Funnel-Logic. Du bekommst den vollen Report ohne E-Mail-Adresse, ohne Signup, ohne "Premium-Features dahinter". Die Bewertung ist die Bewertung.
Das Widget — Trust nach außen tragen
Nach jedem Scan kannst du das eRate/eTrust-Widget kostenlos auf deine Website einbinden. Ähnlich wie Trustpilot, aber für objektive Technik-Kriterien statt subjektive Bewertungen:
<iframe
src="https://crawler.eg-core.de/widget/embed?domain=deinedomain.de"
width="300"
height="150"
frameborder="0">
</iframe>
Wir verifizieren beim Einbetten, dass die anzeigende Domain mit der gescannten übereinstimmt — kein "Fake-A+-Badge", den jemand stehlen könnte.
Warum das was bringt: Ein automatisch generiertes, unbestechliches Vertrauenssiegel. Im Gegensatz zu kaufbaren Gütesiegeln bedeutet ein A+ hier real, dass dein technisches Setup sauber ist.
Wer das nutzt
Aktuell scannen wir mit dem Crawler intern:
- Vor jedem Erstgespräch mit potenziellen Kunden — wir gehen vorbereitet ins Meeting
- Nach jedem Projekt-Release als Quality Gate
- Quartalsweise für alle Hosting-Kunden, die unser Audit-Paket gebucht haben
Extern wird er von Webentwicklern, Agenturen und einigen Datenschutzbeauftragten genutzt, um schnell Sites zu screenen. Genaue Zahlen behalten wir für uns — aber er läuft stabil und schnell genug für unseren Bedarf.
Wenn du es probieren willst
- Scanner: crawler.eg-core.de/scan — keine Registrierung, direkt URL eingeben
- Rating-Erklärung: crawler.eg-core.de/widget/info — alle Bewertungskriterien im Detail
- Technische Doku: crawler.eg-core.de/widget/tech — für Entwickler, die alle Checks im Detail nachlesen wollen
Wenn du das Widget auf deiner Website einbinden willst: nach erfolgreichem Scan bekommst du den Embed-Code direkt im Report.
Top comments (0)