web: E9 und E10 entschieden — Zuordnung aktiv, eine Adresse je statischer Seite, Hub-Portalseiten leiten weiter
E9: Kategorie-Zuordnung wie vorgeschlagen übernommen, Zuordnung ist standardmäßig an (CANONICAL_ASSIGNMENT_ENABLED). Auf der Dev-Kopie verifiziert: Kopie trägt rel=canonical auf die Erstquelle und fällt aus der Sitemap ihres Portals. E10: faq, hilfe, gute-pressemitteilung, die vier Transparenzseiten und die API-Doku lagen auf allen drei Hosts mit identischem Text und je eigenem Self-Canonical. Jetzt führt presseecho die Informationsseiten, der Hub die API-Doku; Sitemap und llms.txt nennen nur die führende Adresse. Rechtstexte (Impressum, Datenschutz, AGB, Richtlinien, Meldeweg, Kündigung) bleiben bewusst je Host — jede Domain ist ein eigenes Angebot mit eigener Anbieterkennzeichnung. Bei der Erreichbarkeitsprüfung des Hubs gefunden und behoben: /de/preise, /de/veroeffentlichen, /de/newsrooms und /de/suche wurden unter pressekonto.com mit dem Branding von businessportal24 ausgeliefert (der Portal-Kontext fällt dort darauf zurück) — jetzt 301 auf presseecho, die Transparenz-Navigation verlinkt direkt dorthin. /de/kontakt und /de/ueber-uns sprangen über /de auf die Startseite, jetzt in einem Schritt. Der Self-Canonical kommt jetzt aus dem aufgerufenen Host; Portal-Inhalte, die über den Hub laufen, behalten ihr Portal (webPortalContextApplied). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
4edb915a9a
commit
5dcaf4e7b0
18 changed files with 434 additions and 17 deletions
|
|
@ -1998,3 +1998,93 @@ entkoppelt. Pint, Larastan ohne Befund.
|
|||
Hintergrund), dann `press-releases:duplicates-report`. Erst nach E9:
|
||||
`CANONICAL_ASSIGNMENT_ENABLED=true`, `press-releases:assign-canonicals
|
||||
--dry-run`, dann ohne Flag, `view:cache`, Sitemaps prüfen.
|
||||
|
||||
## Teil 8 — E9 und E10 entschieden, Hub-Erreichbarkeit geprüft (18.09.2026)
|
||||
|
||||
### E9 — kanonische Zuordnung aktiv
|
||||
|
||||
Zuordnung wie vorgeschlagen übernommen (`config/canonical.php`):
|
||||
businessportal24 führt finanzen, handel, it, recht, wissenschaft-forschung,
|
||||
motor-verkehr; presseecho führt haus, kultur, medizin, mode, politik,
|
||||
reisen, sport, sonstiges. `CANONICAL_ASSIGNMENT_ENABLED` steht jetzt
|
||||
standardmäßig auf `true` — ohne `.env`-Eintrag ist die Zuordnung an.
|
||||
|
||||
Auf der Dev-Kopie verifiziert: 9.092 Paare zugeordnet, die Kopie trägt
|
||||
`rel=canonical` auf die Erstquelle, steht nicht mehr in der Sitemap ihres
|
||||
Portals, die Erstquelle schon.
|
||||
|
||||
### E10 — eine Adresse je Text, Rechtstexte ausgenommen
|
||||
|
||||
Befund: faq, hilfe, gute-pressemitteilung, die vier Transparenzseiten, api
|
||||
und alle Rechtstexte liegen auf **allen drei Hosts** mit identischem Text
|
||||
(nur Markenname getauscht, per Prüfsumme bestätigt) und trugen je einen
|
||||
eigenen Self-Canonical.
|
||||
|
||||
Umgesetzt (`config/canonical.static_page_host`, `App\Support\StaticPageCanonical`):
|
||||
|
||||
| Seiten | Führender Host |
|
||||
|---|---|
|
||||
| faq, hilfe, gute-pressemitteilung, 4 Transparenzseiten | presseecho |
|
||||
| api (Doku des Publisher-Bereichs) | pressekonto |
|
||||
| impressum, datenschutz, agb, richtlinien, melden, kuendigung | **je Host selbst** |
|
||||
|
||||
**Rechtstexte bewusst ausgenommen** — das ist eine Abweichung von „alles auf
|
||||
die Portale". Jede Domain ist ein eigenes Angebot mit eigener
|
||||
Anbieterkennzeichnung und eigenem Meldeweg; wer auf businessportal24.com
|
||||
das Impressum aufruft, muss das Impressum dieser Domain bekommen, und es
|
||||
muss für sich auffindbar bleiben. Ein Canonical auf eine fremde Domain
|
||||
würde dem widersprechen. Inhaltlich sind die Texte identisch — das ist bei
|
||||
Pflichtangaben unkritisch.
|
||||
|
||||
Mitgezogen: Sitemap listet je Seite nur noch den führenden Host (Hub
|
||||
behält api + Rechtstexte), `llms.txt` nennt die führende Adresse, `og:url`
|
||||
folgt dem Canonical.
|
||||
|
||||
### Erreichbarkeit pressekonto.com — geprüft, drei Befunde
|
||||
|
||||
Alle 24 Hub-Adressen und jeder Link der Hub-Startseite geprüft: **alles
|
||||
200**, unbekannte Pfade 404, `sitemap.xml`, `sitemap-news.xml`,
|
||||
`llms.txt`, `robots.txt`, `/docs/api/v1` in Ordnung.
|
||||
|
||||
1. **Portalseiten unter pressekonto.com** (behoben): `/de/preise`,
|
||||
`/de/veroeffentlichen`, `/de/newsrooms`, `/de/suche` wurden auf dem Hub
|
||||
ausgeliefert — mit dem Branding und Titel von **businessportal24**,
|
||||
weil `WebPortalContext::fromRequest()` auf dem Hub auf dieses Portal
|
||||
zurückfällt. Jetzt 301 auf presseecho
|
||||
(`RedirectPortalOnlyPagesFromHub`, web-Gruppe). Die
|
||||
Transparenz-Navigation verlinkt „Tarife & Preise" auf dem Hub direkt
|
||||
auf presseecho, ohne Umweg über die Weiterleitung.
|
||||
2. **Weiterleitungskette** (behoben): `/de/kontakt` und `/de/ueber-uns`
|
||||
zeigten auf `/de`, das auf dem Hub selbst auf `/` weiterleitet — zwei
|
||||
Sprünge. Jetzt direkt auf die Startseite des jeweiligen Hosts.
|
||||
3. **Portal-Inhalte unter pressekonto.com** (offen, Empfehlung unten):
|
||||
`/de/category/{slug}`, `/de/category/{slug}/archiv/{jahr}` und
|
||||
`/de/press-release/{slug}` sind auf dem Hub erreichbar und rendern das
|
||||
Portal (businessportal24), weil die Ausgabe-Routen für alle Hosts
|
||||
gelten. Ihr Canonical zeigt auf das Portal — sie stehen in keiner
|
||||
Sitemap und werden nicht zusätzlich indexiert. **Empfehlung:** auch
|
||||
diese Routen auf dem Hub per 301 auf businessportal24 legen (dasselbe
|
||||
Portal, das der Hub ohnehin rendert; presseecho-only-Meldungen laufen
|
||||
heute wie danach ins 404). Ein Eintrag in
|
||||
`canonical.portal_only_pages` würde nicht reichen, weil das Ziel dort
|
||||
fest auf presseecho steht — braucht eine eigene Zeile. Nicht ohne
|
||||
Freigabe gemacht, weil es rund 34.000 Adressen betrifft.
|
||||
|
||||
Technischer Nebeneffekt: Der Self-Canonical kommt jetzt aus dem
|
||||
tatsächlich aufgerufenen Host (`StaticPageCanonical::selfBase()`) statt aus
|
||||
der geteilten Domain-Config. Portal-Inhalte behalten ihr Portal —
|
||||
`WebPortalContext::fromRequest()` setzt dafür den Merker
|
||||
`webPortalContextApplied`.
|
||||
|
||||
### Tests / Deploy
|
||||
|
||||
`HubPortalPageRedirectTest` (19), angepasste Sitemap-Erwartungen in
|
||||
`StaticPagesTest` und `TransparencyPagesTest`. Gesamtlauf 1.804 grün
|
||||
(eine Ausnahme: `ManualInvoicePdfTest` schlägt unabhängig von diesen
|
||||
Änderungen fehl — mit und ohne Stash reproduziert, Anrede „Frau Erika
|
||||
Muster" fehlt; gehört zum Rechnungs-Paket).
|
||||
|
||||
**Deploy:** `view:cache`/`route:cache` neu, `php artisan cache:clear` für
|
||||
die Sitemap-Caches (1 h TTL). E9 ist ohne `.env`-Eintrag aktiv — davor
|
||||
müssen `press-releases:hash-content` und `press-releases:assign-canonicals`
|
||||
gelaufen sein, sonst passiert schlicht nichts.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue