web: Entitaeten im JSON-LD verknuepft, News-Sitemap und llms.txt (Roadmap 2.1, 2.2, 2.7)

- App\Support\StructuredData: Portal-Organization als Publisher mit @id
  und Logo (ImageObject), Newsroom-@id; NewsArticle.author auf der
  Meldung und Organization auf der Newsroom-Seite beschreiben jetzt
  dieselbe Entitaet. Startseiten nutzen denselben Publisher.
- /sitemap-news.xml je Spoke (NewsSitemapController): im Archiv
  sichtbare Meldungen der letzten 48 h, max. 1.000, news:publication
  mit Portalname und Sprache; 15 min gecacht, mit den anderen Sitemaps
  geleert; in robots.txt der Spokes. Hub liefert leere Liste.
- /llms.txt je Host (LlmsTxtController): sachliche Beschreibung,
  URL-Aufbau, aktive Kategorien, Seiten fuer Unternehmen, Rechtliches;
  Hub verweist auf beide Portale. Keine Aussagen ueber KI-Nennungen.
- Protokoll Teil 5 (Block 2) inkl. Betreiber-Schritten fuer das
  Publisher Center und Befund zu 2.5/E5; Roadmap 2.1/2.7 abgehakt.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Kevin Adametz 2026-09-17 10:15:28 +00:00
parent 713024be37
commit b74f881ac8
15 changed files with 521 additions and 23 deletions

View file

@ -184,13 +184,13 @@ Verbreitert den Trichter oben. Sinnvoll erst, wenn Block 1 unten geschlossen ist
| Nr. | Arbeitspaket | Aufwand | Abhängigkeit |
|---|---|---|---|
| 2.1 | NewsArticle-Schema auf allen Meldungen, Organization-Schema auf Newsrooms | M | 1b.1 |
| 2.2 | Aufnahme in Google News und Publisher Center prüfen und beantragen | M | 2.1 |
| ~~2.1~~ | NewsArticle-Schema auf allen Meldungen, Organization-Schema auf Newsrooms — **Grundgerüst seit Juli (379688f), 17.09.2026 ergänzt:** gemeinsame `@id` zwischen `NewsArticle.author` und Newsroom-Organization, Publisher mit `@id` und Logo (`App\Support\StructuredData`) | M | 1b.1 |
| 2.2 | Aufnahme in Google News und Publisher Center prüfen und beantragen — **technischer Teil 17.09.2026:** News-Sitemap `/sitemap-news.xml` je Spoke (48 h, ≤ 1.000), in `robots.txt`; Publisher-Center-Anmeldung liegt beim Betreiber (Protokoll Teil 5) | M | 2.1 |
| 2.3 | Branchen- und Kategorie-Landingpages aus dem Archivbestand | M | keine |
| 2.4 | Transparenzseiten: Preisvergleich, ohne Abo veröffentlichen, ohne Mindestlaufzeit | S | keine |
| 2.5 | Konsolidierung der bestehenden Ratgeberseiten unter `/de/presse/` gegen 1d.1 und 2.4 prüfen | S | 1d.1 |
| 2.6 | Outreach an Betreiber von Presseportal-Listen und Vergleichsartikeln | M | 2.4 |
| 2.7 | Auffindbarkeit für KI-Systeme: strukturierte Daten, klare Entitätszuordnung, `llms.txt` | M | 2.1 |
| ~~2.7~~ | Auffindbarkeit für KI-Systeme: strukturierte Daten, klare Entitätszuordnung, `llms.txt` — **17.09.2026:** `/llms.txt` je Host (Hub verweist auf beide Portale), Entitätszuordnung über 2.1 | M | 2.1 |
**Formulierungsgrenze bei 2.7:** Die technischen Voraussetzungen zu beschreiben ist haltbar. Eine Nennung in KI-Antworten zu versprechen ist es nicht. Vor Veröffentlichung auf einer Preisseite sauber formulieren.
@ -235,7 +235,7 @@ Braucht Betreuungszeit und ist teilweise von Dritten abhängig.
| ~~E2~~ | **Empfehlung 01.09.2026: Rohzahlen** — kein Bodensatz, Verteilung symmetrisch, Einordnung gegen den Schnitt wäre wegen der Wachstumskurve falsch (siehe `basiswerte-block0.md`). | 1c.1 |
| ~~E3~~ | **Entschieden 16.09.2026: keine Credits.** Prüfung ist Teil der Freigabe, nicht ein Werkzeug; N automatische Läufe je Meldung (einstellbar, 3), danach Mensch, Automatik für die Meldung aus. Gelb geht weiter automatisch online, `yellow_to_manual_queue` bleibt als Schalter (Vorgabe aus). | 1d.4 |
| ~~E4~~ | **Entschieden 15.09.2026: der Magic-Link-Hinweis, am Ende der Mail, als Hinweis, nicht als Angebot.** Umgesetzt in 1b.4. Der Link auf die Infoseite (1d.2) bekommt damit keinen Platz in der Veröffentlichungsmail — ein Element pro Mail. | 1b.4, 1d.2 |
| E5 | Werden die bestehenden Ratgeberseiten konsolidiert oder ergänzt | 2.5 |
| E5 | Werden die bestehenden Ratgeberseiten konsolidiert oder ergänzt — **Befund 17.09.2026:** `/de/presse/*` leitet seit R3.2 auf `/faq`; offen ist nur, ob Schreib-Slugs stattdessen auf `/gute-pressemitteilung` zeigen sollen (Protokoll Teil 5) | 2.5 |
| E6 | Bleibt die Ablehnungsstrecke dauerhaft frei von kommerziellen Angeboten | 1d.1, 1d.6 |
---

View file

@ -1537,3 +1537,96 @@ Die 1.302 davon mit Meldungen haben nur `rejected` (bis 2019) und
`archived` (bis 2022), nichts Öffentliches. Die 44 Besitzerkonten bleiben
unangetastet — 24 führen auch saubere Firmen. Dry-Run Dev-DB: 4.391.
Test: `RetireLinkSpamCompaniesTest`.
---
## Teil 5 — Block 2: Organische Sichtbarkeit (ab 17.09.2026)
Block 1 ist komplett und live (17.09.2026). Block 2 beginnt mit dem
technischen Teil (2.1, 2.2, 2.7); die Inhalts- und Marketing-Pakete (2.3,
2.4, 2.6) folgen, 2.5 hängt an E5.
### 2.1 — NewsArticle und Organization (17.09.2026)
**Stand vorher:** Das Grundgerüst gab es seit Juli (Commit 379688f):
NewsArticle + BreadcrumbList auf jeder öffentlichen Meldung, Organization
auf dem Newsroom, WebSite + Organization auf den Portal-Startseiten,
BreadcrumbList auf Kategorien; Ausgabe über `x-web.structured-data`
(JSON_HEX_TAG gegen `</script>`-Ausbruch). Die Vorschau bleibt ohne Markup.
**Was fehlte:** Die Entitäten hingen nicht zusammen. `NewsArticle.author`
und die Organization der Newsroom-Seite waren zwei namensgleiche Objekte
ohne gemeinsame `@id`; der Publisher hatte kein Logo (Google empfiehlt es
für Article-Rich-Results) und ebenfalls keine `@id`.
**Umsetzung:** `App\Support\StructuredData` bündelt die Entitäten:
- `publisher($portalBase)` — Organization des Portals mit
`@id = {portal}/#organization`, Name aus `config/domains.php`, Logo als
ImageObject (`/images/presseecho-logo.svg` bzw.
`businessportal-logo.svg`, 600×200). Verwendet auf Meldung (publisher)
und Startseite.
- `newsroomUrl()` / `newsroomId()` — `@id = {newsroom-url}#organization`.
Die Newsroom-Seite trägt sie, `NewsArticle.author` verweist darauf.
- Bewusst nicht ins Organization-Markup: Adresse, E-Mail, Telefon. Die
Newsroom-Seite zeigt sie nicht, und Markup ohne sichtbares Gegenstück
ist gegen Googles Richtlinien.
Tests: `StructuredDataTest` erweitert (Publisher-`@id`, Logo,
Author-`@id`, Newsroom-`@id`).
### 2.2 — Google News, technischer Teil (17.09.2026)
**Umsetzung:** News-Sitemap je Spoke: `/sitemap-news.xml`
(`NewsSitemapController`) — nur im Archiv sichtbare Meldungen der letzten
48 Stunden, höchstens 1.000, `news:publication` mit Portalname und
Sprache (`language` der Meldung, Fallback `de`), `news:publication_date`,
`news:title`. 15 Minuten gecacht je Host, wird mit den anderen Sitemaps
über `WebCaches::forgetSitemaps()` geleert. `robots.txt` der Spokes nennt
sie; der Hub liefert eine leere Liste und nennt sie nicht.
**Was jetzt beim Betreiber liegt (nicht im Code):**
1. Search Console: beide Spokes als Property bestätigt haben.
2. Publisher Center (publishercenter.google.com): je Portal eine
Publikation anlegen — Name exakt wie in `news:name` („presseecho",
„businessportal24"), Sprache Deutsch, Standort DE, Website-URL des
Portals; Logo (quadratisch und rechteckig) hochladen.
3. In der Publikation den Bereich „Google News" einrichten: Abschnitte
(z. B. die Kategorien) als Feed oder Web-Bereich anlegen; die
News-Sitemap wird nicht dort, sondern in der Search Console
eingereicht (Sitemaps → `/sitemap-news.xml`).
4. Erwartung ehrlich halten: Google News nimmt Presseportale nicht
verlässlich auf („Pressemitteilungen" sind laut Inhaltsrichtlinien
zulässig, aber kein bevorzugter Inhalt). Die Sitemap ist die
Voraussetzung, keine Zusage. Ergebnis nach 4–6 Wochen in der Search
Console unter „Leistung → Google News" ablesen.
Tests: `NewsSitemapTest` (3).
### 2.7 — Auffindbarkeit für KI-Systeme (17.09.2026)
**Umsetzung:** `/llms.txt` je Host (`LlmsTxtController`, 1 h gecacht):
Titel, Kurzbeschreibung (Tagline aus `config/domains.php`), sachlicher
Absatz zu Urheberschaft (Unternehmen = Urheber, Portal = Herausgeber) und
zu den strukturierten Daten, URL-Aufbau (Meldung, Newsroom, Kategorie,
Sitemaps), aktive Kategorien mit Links, Seiten für Unternehmen,
Rechtliches. Der Hub verweist auf beide Portale und die OpenAPI-Datei.
Formulierungsgrenze eingehalten: keine Aussage darüber, ob oder wie
KI-Systeme die Inhalte verwenden. Die Entitätszuordnung aus 2.1 (`@id`
zwischen Meldung und Newsroom) ist der zweite Teil von 2.7.
Tests: `LlmsTxtTest` (2).
### Befund zu 2.5 / E5
Die alte Ratgeber-Strecke `/de/presse/*.html` leitet seit dem Rückbau
(R3.2) per 301 auf `/de/faq`. Es gibt also keine Ratgeberseiten mehr, die
zu konsolidieren wären — die Frage E5 reduziert sich darauf, ob die
Alt-URLs zum Schreiben von Pressemitteilungen künftig auf die Hilfeseite
`/de/gute-pressemitteilung` (1d.1) statt auf die FAQ zeigen sollen.
Empfehlung: ja für Slugs, die erkennbar das Schreiben betreffen, sonst
FAQ. Braucht die Liste der Alt-Slugs aus dem Webserver-Log oder der
Search Console; ohne die bleibt es bei FAQ.
**Deploy:** kein `migrate`, nur `view:cache`/`route:cache` wie üblich.
Danach `/sitemap-news.xml`, `/llms.txt` und eine Meldung im
Rich-Results-Test (search.google.com/test/rich-results) prüfen.