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:
Kevin Adametz 2026-09-18 07:52:09 +00:00
parent 4edb915a9a
commit 5dcaf4e7b0
18 changed files with 434 additions and 17 deletions

View file

@ -241,8 +241,8 @@ Braucht Betreuungszeit und ist teilweise von Dritten abhängig.
| E6 | Bleibt die Ablehnungsstrecke dauerhaft frei von kommerziellen Angeboten | 1d.1, 1d.6 |
| ~~E7~~ | **Entschieden 17.09.2026 (Anhang 1):** keine kostenfreie Einreichung, dauerhaft | 2.4, 2.6 |
| E8 | Kundenansicht des Indexierungsstatus — gebaut, zu (`GSC_CUSTOMER_VISIBLE`), Entscheidung nach Verteilung aus 1c.4 (Anhang 1) | 1c.5 |
| E9 | Kanonische Zuordnung je Kategorie — Vorschlag in `config/canonical.php`, Mechanismus gebaut und aus (`CANONICAL_ASSIGNMENT_ENABLED`) (Anhang 2) | 1c.8 |
| E10 | Transparenz-/Statikseiten: Hub oder Portale als Canonical — Befund: dreifach vorhanden (Anhang 2, Protokoll Teil 7) | 2.4 |
| ~~E9~~ | **Entschieden 18.09.2026:** Zuordnung je Kategorie wie vorgeschlagen, Mechanismus aktiv (Anhang 2, Protokoll Teil 8) | 1c.8 |
| ~~E10~~ | **Entschieden 18.09.2026: Portale führen** (presseecho), API-Doku beim Hub, Rechtstexte je Host (Anhang 2, Protokoll Teil 8) | 2.4 |
---

View file

@ -9,7 +9,7 @@
| Änderung | Betrifft | Art |
|---|---|---|
| Crawler-Abruf-Protokoll als eigenes Arbeitspaket | 1c.0 | neu |
| Absenderansicht in Stufen zerlegt, Indexierungsstatus zunächst intern | 1c.1, 1c.4 bis 1c.6 | ersetzt |
| Absenderansicht in Stufen zerlegt, Indexierungsstatus zunächst intern | 1c.1, 1c.4 bis 1c.N9A59YXJai6 | ersetzt |
| Erstquelle gegen Kopie als Argument für die Direktveröffentlichung | 1d | neu |
| Transparenzseiten ausformuliert, kein Wettbewerbervergleich | 2.4 | ersetzt |
| Zuschriften an Portalübersichten ausformuliert, zwei konkrete Ziele | 2.6 | ersetzt |

View file

@ -99,7 +99,7 @@ Zwei Portale bedeuten zwei Fundstellen für Leser, nicht zwei Fundstellen in der
Die Property ist angelegt, wird für die Indexierungsprüfung aus 1c.4 aber nicht gebraucht — das Tageskontingent geht an die beiden Portale. Zwei Dinge sind dort trotzdem zu prüfen:
- ~~Stehen Konto- und Login-Bereiche auf `noindex`?~~ **17.09.2026: ja, jetzt per Meta-Tag in allen Portal-Layouts.** Die Indexierungsübersicht der neuen Property zeigt, was Google von dort erfasst hat.
- **Offene Entscheidung E10:** Wohin gehören die Transparenzseiten aus 2.4 — auf den Hub oder auf die Portale? Die Portale haben die deutlich ältere Domain, der Hub die thematisch passendere Adresse.
- ~~**Offene Entscheidung E10**~~ **Entschieden 18.09.2026: Portale führen, presseecho als Standard; die API-Doku bleibt beim Hub, Rechtstexte je Host.** Dabei aufgefallen und behoben: `/de/preise`, `/de/veroeffentlichen`, `/de/newsrooms` und `/de/suche` wurden unter pressekonto.com mit dem Branding von businessportal24 ausgeliefert — jetzt 301 auf presseecho. Offen: Kategorie-, Archiv- und Meldungsadressen sind auf dem Hub weiterhin erreichbar (Canonical zeigt aufs Portal, keine Sitemap-Einträge) — Empfehlung 301 auf businessportal24, ~34.000 Adressen, wartet auf Freigabe.
---
@ -107,5 +107,5 @@ Die Property ist angelegt, wird für die Indexierungsprüfung aus 1c.4 aber nich
| Nr. | Frage | Betrifft |
|---|---|---|
| E9 | Kanonische Zuordnung je Kategorie: welches Portal führt welches Themenfeld — *Vorschlag liegt in `config/canonical.php`, Mechanismus wartet auf `CANONICAL_ASSIGNMENT_ENABLED=true`* | 1c.8 |
| E10 | Wohin gehören die Transparenzseiten aus 2.4 — Hub oder Portale. *Befund 17.09.2026: alle statischen Seiten liegen auf drei Hosts mit je eigenem Canonical; Empfehlung Portale (Protokoll Teil 7)* | 2.4 |
| ~~E9~~ | **Entschieden 18.09.2026:** Zuordnung wie vorgeschlagen (businessportal24: finanzen, handel, it, recht, wissenschaft-forschung, motor-verkehr; presseecho: alle übrigen inkl. sonstiges). Zuordnung ist aktiv, `CANONICAL_ASSIGNMENT_ENABLED` steht standardmäßig auf true | 1c.8 |
| ~~E10~~ | **Entschieden 18.09.2026: Portale führen** — presseecho für faq, hilfe, gute-pressemitteilung und die vier Transparenzseiten, pressekonto für die API-Doku. Rechtstexte bleiben bewusst je Host (eigene Anbieterkennzeichnung, eigener Meldeweg). Sitemap und llms.txt nennen nur die führende Adresse (Protokoll Teil 8) | 2.4 |

View file

@ -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.