Alt-Texte, Schema.org-Auszeichnung und semantische Fett-Tags aufräumen #59

Open
opened 2026-09-06 19:59:23 +00:00 by Phil · 0 comments
Owner

Restliche Befunde aus dem Seobility-Report vom 06.09.2026 — niedrigere Priorität als #57 und #58, aber alle belegt.

1. Fehlende Alt-Texte (3 Bilder, neu im Report)

  • templates/_components/blog/videoVersion.twig:22 — YouTube-Thumbnail mit alt="", obwohl das <img> der einzige Inhalt des Play-Buttons ist
  • templates/_components/_blocks/pl_videoTestimonialSection.twig:58 — <img src="{{ poster.url }}" alt="" loading="lazy">

Strukturelle Ursache dahinter: templates/_components/core/image.twig:26 baut den Alt-Fallback aus siteSettings.siteName, wird aber aus blog/card.twig:16-23 und blog/hero.twig:22-29 mit only eingebunden — siteSettings ist dort undefiniert, der Alt-Text kollabiert auf „Ein Bild von ". Kein einziger include "_components/core/image" in _blocks/ übergibt ein alt:-Prop.

CKEditor-Inhalte gehen über templates/_components/blog/body.twig:10 ({{- entry.articleBody | raw -}}) ungefiltert raus — Editor-Bilder ohne Alt-Text landen so auf der Seite.

2. Schema Validation: 14 Beanstandungen

  • Einzige JSON-LD-Quelle ist templates/_components/blog/schema.twig:77-79, eingebunden nur aus templates/_pages/blog/entry.twig:21 → Startseite, Unterseiten und Blog-Index haben gar keine strukturierten Daten
  • Nullwerte werden mitserialisiert: schema.twig:22-23 (datePublished/dateModified), :28-31 (image), :47 (wordCount) landen bei leeren Feldern als "image":null im Output
  • Doppelte Entität: templates/_pages/blog/entry.twig:23 setzt <article itemscope itemtype="https://schema.org/Article"> ohne ein einziges itemprop — eine zweite, leere Article-Auszeichnung neben dem JSON-LD
  • schema.twig:48 inLanguage: currentSite.language erbt die de-DE/en-Inkonsistenz

3. Strong-/Bold-Probleme (8 Seiten)

<b> ersetzt durchgehend Überschriften und Beschriftungen statt sie auszuzeichnen:

  • _components/relaunch/s07-pakete.twig:32,42,52 · v2/s07-pakete.twig:44,60,76
  • _components/relaunch/s08-partner.twig:34,42,50,58
  • _components/relaunch/s04-produkte.twig:22-25,35,59,68
  • _components/relaunch/s02-beleg.twig:29,45 · s03-betrieb.twig:38 · s06-analyse.twig:45
  • <b> verschachtelt in Überschriften: v2/s10-fragen.twig:28, v2/s09-stimmen.twig:55, Zahlen-Bolds v2/s10-fragen.twig:38-40, v2/s04-produkte.twig:191

Redaktionell freigegeben durch Striptags-Whitelists in pl_differencesSection.twig:23,27, pl_columnsSection.twig:56,61, pl_coreSection.twig:32, pl_faqSection.twig:11.

4. Vorschau-Templates sind öffentlich abrufbar

templates/preview/*.twig (13 Dateien) plus templates/_layouts/relaunch-preview.twig sind über /preview/... direkt routbar. Sie tragen noindex, nofollow, gehören aber nicht auf eine Produktionsdomain. Zusätzlich setzen sie <html lang="de"> hart (relaunch-preview.twig:21).

Nicht zu tun

  • 234 doppelte Textblöcke: überwiegend die Zweisprachigkeit plus wiederkehrende Bausteine, Trend bereits fallend (-24). Erst nach #57 und #58 neu messen, vorher nichts anfassen.
  • 5 „problematische externe Links": nur einer reproduzierbar — LinkedIn beantwortet Bot-Anfragen mit Status 999. Das ist LinkedIns Verhalten, kein Fehler auf unserer Seite. Bleibt so.
  • Die eine Seite mit Tippfehlern ist Redaktionsarbeit.

Akzeptanzkriterien

  • Kein <img> ohne sinnvollen Alt-Text; rein dekorative Bilder tragen begründet alt=""
  • core/image.twig liefert auch bei only-Include einen brauchbaren Fallback; Aufrufer übergeben alt
  • JSON-LD ohne Nullwerte, keine doppelte Article-Entität, Startseite mit Organisation/Person ausgezeichnet
  • Validierung gegen den Rich-Results-Test ohne Fehler
  • <b> nur noch dort, wo es semantisch stimmt; Fettung sonst über CSS
  • Vorschau-Templates nicht mehr öffentlich erreichbar

Plan: .claude/plans/ (Schritt 3 von 3). Voraussetzung: #57, #58.

Restliche Befunde aus dem Seobility-Report vom 06.09.2026 — niedrigere Priorität als #57 und #58, aber alle belegt. ## 1. Fehlende Alt-Texte (3 Bilder, neu im Report) - `templates/_components/blog/videoVersion.twig:22` — YouTube-Thumbnail mit `alt=""`, obwohl das `<img>` der einzige Inhalt des Play-Buttons ist - `templates/_components/_blocks/pl_videoTestimonialSection.twig:58` — `<img src="{{ poster.url }}" alt="" loading="lazy">` Strukturelle Ursache dahinter: `templates/_components/core/image.twig:26` baut den Alt-Fallback aus `siteSettings.siteName`, wird aber aus `blog/card.twig:16-23` und `blog/hero.twig:22-29` mit `only` eingebunden — `siteSettings` ist dort undefiniert, der Alt-Text kollabiert auf „Ein Bild von ". **Kein einziger** `include "_components/core/image"` in `_blocks/` übergibt ein `alt:`-Prop. CKEditor-Inhalte gehen über `templates/_components/blog/body.twig:10` (`{{- entry.articleBody | raw -}}`) ungefiltert raus — Editor-Bilder ohne Alt-Text landen so auf der Seite. ## 2. Schema Validation: 14 Beanstandungen - Einzige JSON-LD-Quelle ist `templates/_components/blog/schema.twig:77-79`, eingebunden nur aus `templates/_pages/blog/entry.twig:21` → **Startseite, Unterseiten und Blog-Index haben gar keine strukturierten Daten** - Nullwerte werden mitserialisiert: `schema.twig:22-23` (`datePublished`/`dateModified`), `:28-31` (`image`), `:47` (`wordCount`) landen bei leeren Feldern als `"image":null` im Output - Doppelte Entität: `templates/_pages/blog/entry.twig:23` setzt `<article itemscope itemtype="https://schema.org/Article">` ohne ein einziges `itemprop` — eine zweite, leere Article-Auszeichnung neben dem JSON-LD - `schema.twig:48` `inLanguage: currentSite.language` erbt die `de-DE`/`en`-Inkonsistenz ## 3. Strong-/Bold-Probleme (8 Seiten) `<b>` ersetzt durchgehend Überschriften und Beschriftungen statt sie auszuzeichnen: - `_components/relaunch/s07-pakete.twig:32,42,52` · `v2/s07-pakete.twig:44,60,76` - `_components/relaunch/s08-partner.twig:34,42,50,58` - `_components/relaunch/s04-produkte.twig:22-25,35,59,68` - `_components/relaunch/s02-beleg.twig:29,45` · `s03-betrieb.twig:38` · `s06-analyse.twig:45` - `<b>` verschachtelt in Überschriften: `v2/s10-fragen.twig:28`, `v2/s09-stimmen.twig:55`, Zahlen-Bolds `v2/s10-fragen.twig:38-40`, `v2/s04-produkte.twig:191` Redaktionell freigegeben durch Striptags-Whitelists in `pl_differencesSection.twig:23,27`, `pl_columnsSection.twig:56,61`, `pl_coreSection.twig:32`, `pl_faqSection.twig:11`. ## 4. Vorschau-Templates sind öffentlich abrufbar `templates/preview/*.twig` (13 Dateien) plus `templates/_layouts/relaunch-preview.twig` sind über `/preview/...` direkt routbar. Sie tragen `noindex, nofollow`, gehören aber nicht auf eine Produktionsdomain. Zusätzlich setzen sie `<html lang="de">` hart (`relaunch-preview.twig:21`). ## Nicht zu tun - **234 doppelte Textblöcke:** überwiegend die Zweisprachigkeit plus wiederkehrende Bausteine, Trend bereits fallend (-24). Erst nach #57 und #58 neu messen, vorher nichts anfassen. - **5 „problematische externe Links":** nur einer reproduzierbar — LinkedIn beantwortet Bot-Anfragen mit Status 999. Das ist LinkedIns Verhalten, kein Fehler auf unserer Seite. Bleibt so. - Die eine Seite mit Tippfehlern ist Redaktionsarbeit. ## Akzeptanzkriterien - [ ] Kein `<img>` ohne sinnvollen Alt-Text; rein dekorative Bilder tragen begründet `alt=""` - [ ] `core/image.twig` liefert auch bei `only`-Include einen brauchbaren Fallback; Aufrufer übergeben `alt` - [ ] JSON-LD ohne Nullwerte, keine doppelte Article-Entität, Startseite mit Organisation/Person ausgezeichnet - [ ] Validierung gegen den Rich-Results-Test ohne Fehler - [ ] `<b>` nur noch dort, wo es semantisch stimmt; Fettung sonst über CSS - [ ] Vorschau-Templates nicht mehr öffentlich erreichbar Plan: `.claude/plans/` (Schritt 3 von 3). Voraussetzung: #57, #58.
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
Phil/philflow.io#59
No description provided.