(bool) env('CANONICAL_ASSIGNMENT_ENABLED', true), // ID der Hauptkategorie => Portal, das die Erstquelle führt (E9). // Maßgeblich vor `portal_by_category`: eine Slug-Änderung im Admin // schaltete die Zuordnung sonst still ab (Umsetzungsaudit 29.09.2026, // R-11). IDs aus dem Bestand (Stand 29.09.2026, identisch mit der // Slug-Liste unten — gleiche Wirkung). Im Testlauf leer: dort vergibt // SQLite die IDs neu, Tests setzen ihre Zuordnung selbst. 'portal_by_category_id' => env('APP_ENV') === 'testing' ? [] : [ 1 => 'businessportal24', // handel 2 => 'businessportal24', // it 3 => 'businessportal24', // finanzen 4 => 'presseecho', // reisen 5 => 'presseecho', // kultur 6 => 'presseecho', // politik 7 => 'presseecho', // medizin 8 => 'presseecho', // sport 9 => 'businessportal24', // motor-verkehr 10 => 'presseecho', // haus 11 => 'presseecho', // mode 12 => 'presseecho', // sonstiges 13 => 'businessportal24', // wissenschaft-forschung 14 => 'businessportal24', // recht ], // Rückwärtskompatibel: DE-Slug der Hauptkategorie => Portal. Greift nur // für Hauptkategorien ohne Eintrag in `portal_by_category_id`. // Kategorien ohne beides fallen auf `fallback`. 'portal_by_category' => [ 'finanzen' => 'businessportal24', 'handel' => 'businessportal24', 'it' => 'businessportal24', 'recht' => 'businessportal24', 'wissenschaft-forschung' => 'businessportal24', 'motor-verkehr' => 'businessportal24', 'haus' => 'presseecho', 'kultur' => 'presseecho', 'medizin' => 'presseecho', 'mode' => 'presseecho', 'politik' => 'presseecho', 'reisen' => 'presseecho', 'sport' => 'presseecho', 'sonstiges' => 'presseecho', ], // Ohne Kategorie-Eintrag: 'first' = die zuerst veröffentlichte Fassung // bleibt Erstquelle; alternativ ein Portalname als feste Vorgabe. 'fallback' => env('CANONICAL_FALLBACK', 'first'), /* |---------------------------------------------------------------------- | Statische Seiten auf drei Hosts (E10, entschieden 18.09.2026) |---------------------------------------------------------------------- | | faq, hilfe, Transparenzseiten & Co. werden auf Hub und beiden Portalen | mit identischem Text ausgeliefert — dieselbe Doppelung wie bei den | Meldungen, nur dreifach. Die Portale führen (ältere Domains), | presseecho ist der Standard; die API-Dokumentation gehört zum Hub. | | Routenname => Domain-Schlüssel aus config/domains.php. Nicht gelistete | Seiten bleiben self-canonical je Host. | | BEWUSST NICHT gelistet: impressum, datenschutz, agb, richtlinien, | melden, kuendigung. Jede Domain ist ein eigenes Angebot mit eigener | Anbieterkennzeichnung, eigenem Meldeweg und eigenen Bedingungen — | diese Seiten müssen je Host für sich stehen und auffindbar bleiben. | */ 'static_page_host' => [ 'faq' => 'presseecho', 'hilfe' => 'presseecho', 'gute-pressemitteilung' => 'presseecho', 'was-kostet-eine-pressemitteilung' => 'presseecho', 'pressemitteilung-veroeffentlichen-ohne-abo' => 'presseecho', 'pressemitteilung-loeschen-oder-aendern-lassen' => 'presseecho', 'pressemitteilung-kostenlos-veroeffentlichen' => 'presseecho', 'api' => 'pressekonto', ], /* | Seiten, die es nur auf den Portalen gibt. Auf dem Hub wurden sie bisher | mit Portal-Branding unter pressekonto.com ausgeliefert (der Portal- | Kontext fällt dort auf businessportal24 zurück) — jetzt 301 auf das | führende Portal. */ 'portal_only_pages' => ['preise', 'veroeffentlichen', 'newsrooms', 'suche', 'rss'], /* | Portal-INHALTE (Kategorie, Jahresarchiv, Meldung, Newsroom). Die | Ausgabe-Routen gelten für alle Hosts, deshalb waren sie auch unter | pressekonto.com erreichbar — dieselben Texte ein drittes Mal, nur mit | dem Branding des Portals, auf das der Hub-Kontext zurückfällt. | Ziel ist bei Meldung und Newsroom das Portal des Eintrags selbst, | sonst `portal_only_host`. */ 'portal_only_content_routes' => ['kategorie', 'kategorie.archiv', 'kategorie.feed', 'feed', 'release.detail', 'newsroom', 'newsroom.claim', 'newsroom.feed'], 'portal_only_host' => 'presseecho', ];