News: redaktionell eingefuegtes FAQPage-JSON als echtes Schema ausgeben
17 SEO-Artikel tragen ein rohes FAQPage-JSON-Objekt in einem abschliessenden Absatz ihres Bodytexts - das Frontend renderte es als sichtbaren Text, Google sah es nie als strukturierte Daten. Neue Klasse Seo\EmbeddedJsonLd trennt solche schema.org-Bloecke aus dem RTE-HTML (fail-safe: was nicht sauber dekodiert, bleibt stehen): - NewsJsonRenderer: Detail-bodytext und Listen-Exzerpt ohne die Bloecke - PageJsonLdRenderer: die dekodierten Nodes wandern in den @graph der Seite (FAQPage landet damit als <script type=application/ld+json> im Head, den das Frontend bereits injiziert) - VitecMetaHandler: Description-Fallback aus dem Bodytext ohne JSON-Muell Verifiziert an 3 Artikeln: @graph mit NewsArticle + FAQPage (8-9 Fragen), kein FAQPage-Rest im Textkoerper, kein sichtbarer JSON-Absatz im HTML. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
c9b00e6f10
commit
5c640d02f7
4 files changed
+71
-2
No files matched your search
@@ -85,7 +85,9 @@ class VitecMetaHandler extends MetaHandler
|
||||
}
|
||||
$description = $this->plainText((string)($news['teaser'] ?? ''));
|
||||
if ($description === '') {
|
||||
$description = $this->plainText((string)($news['bodytext'] ?? ''));
|
||||
$description = $this->plainText(
|
||||
EmbeddedJsonLd::extract((string)($news['bodytext'] ?? ''))['html']
|
||||
);
|
||||
}
|
||||
$image = $this->firstImage('tx_news_domain_model_news', 'fal_media', $newsUid);
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user