Drei konventionelle Discovery-Dateien, ausgeliefert unter festen URLs, die jeder Web-Crawler und jede Offenlegungs-Pipeline ohnehin abfragt: /robots.txt, /sitemap.xml und /.well-known/security.txt. Auf CodeB sind sie mandantengetrennt nach Request-Host — eine IIS-Site pro Mandant, ein kanonischer Host pro Sitemap. Keine Authentifizierung, keine Parameter, keine Cookies.
Mandantenfähigkeit über Domains. CodeB liefert eine IIS-Site pro Mandanten-FQDN aus (siehe CPaaS). Die Discovery-Dateien werten den Host:-Header des Requests aus, sodass die Crawler eines Mandanten nur dessen URLs sehen — nie die eines Nachbar-Mandanten.
Standardmäßige Robots-Exclusion-Datei (RFC 9309). Die Zeile Sitemap: wird bei jedem Request auf denselben Host umgeschrieben, den der Crawler abgefragt hat — oder, falls der Betreiber in der appsettings.json des Mandanten Site:CanonicalHost gesetzt hat, auf diesen kanonischen Override.
Die Disallow-Liste ist hostunabhängig — sie umfasst Backend-.ashx-Handler, OAuth2-Pfad-Aliase, mandantengebundene WebRTC- und Auth-Flow-Seiten, die Admin-/Superadmin-Dashboards sowie PWA-Support-Dateien. Nur die abschließende Sitemap:-Zeile unterscheidet sich zwischen Mandanten.
Diagnose-Header
X-Build-Version — Handler-Build-Kennung. Wird bei jeder Verhaltensänderung erhöht. Smoke-Probes prüfen darauf.
X-Tenant — der Request-Host: wie geparst.
X-Canonical-Host — der aufgelöste kanonische Host, der auf der Sitemap:-Zeile landet.
Beispiel
curl -i https://www.aloaha.com/robots.txt
curl -i https://aloaha.com/robots.txt # andere Sitemap:-Zeile
URL-Rewrite liefert /robots.txt intern aus einem dynamischen Handler aus. Die öffentliche URL bleibt bei /robots.txt, damit Crawler die konventionelle Stelle finden.
XML-Sitemap, bei jedem Request per Dateisystem-Scan erzeugt, eingeschränkt auf den Request-Host. Kundenseiten im Root und unter /de/ sind enthalten; Admin-, mandantengebundene, Auth-Flow- und PWA-Support-Dateien werden über eine Deny-Liste herausgefiltert, die die Disallow-Liste der robots.txt spiegelt. Das Ergebnis wird pro kanonischem Host 60 Sekunden im Prozess gecached.
<lastmod> — die mtime der HTML-Datei, yyyy-MM-dd. Drift zwischen Disk und Sitemap ist durch den 60‑Sekunden-Cache begrenzt.
<changefreq> + <priority> — heuristisch pro Dateiname.
<xhtml:link rel="alternate"> — EN ↔ DE-Alternativ wird emittiert, sobald eine passende Datei /de/<name> auf der Disk liegt.
Auflösung des kanonischen Hosts
App_Data/<host>/appsettings.json → Site:CanonicalHost gewinnt, falls gesetzt. Ermöglicht einem Betreiber, die Sitemap auf www.example.com statt phone.example.com zeigen zu lassen.
Ansonsten Request.Url.Host — der Host, den der Crawler abgefragt hat.
Beispiel
curl -i https://www.aloaha.com/sitemap.xml
Der Datei-Scan auf der Disk ist die Quelle der Wahrheit, nicht eine handgepflegte Sitemap-Liste. Eine neue .html-Datei im Root liegt — vorbehaltlich der Deny-Liste — innerhalb einer Minute in /sitemap.xml. Umgekehrt kann nichts aus der Deny-Liste versehentlich in eine Sitemap durchrutschen.
Für die vollständige Incident-Handling-Haltung siehe CRA / Cyber-Resilienz. CodeB-Betreiber, die unter Verordnung (EU) 2024/2847 berichten, sollten ihr CSIRT zusätzlich in die Contact:-Adressen oben einbinden.
Brauchen Sie einen Admin-Endpunkt? Admin-only- und OIDC-Bearer-geschützte Routen sind in der Admin-UI selbst dokumentiert (sichtbar nur für angemeldete Admins auf diesem Host). Die öffentliche API-Fläche auf dieser Seite ist das, wogegen Sie ohne CodeB-Konto integrieren können.