Skip to content

SEO panel fields silently ignored unless the page wires getSeoMeta (footgun for content editors) #1518

Description

@DavidPivert

Problem

The admin exposes a full SEO panel (SEO title, meta description, OG image, canonical URL, "hide from search engines"/noindex). Content editors fill it in expecting it to take effect.

But these fields live on entry.data.seo and have no effect unless the page template explicitly calls getSeoMeta (or getContentSeo). A site author who hand-rolls a collection detail page like:

<title>{entry.data.title}</title>
<meta name="description" content={entry.data.excerpt} />

silently bypasses the entire panel — including the noindex toggle, which is an indexing/correctness risk, not just cosmetic.

Why it's a trap

  • The breakage is invisible: no error, no warning — the panel just does nothing.
  • The editor and the developer are often different people; the editor has no way to know the field is dead.
  • The docs (skills/building-emdash-site/references/site-features.md) only show getSeoMeta for a posts page and never state that every content detail page must wire it or the panel is inert.

I hit this on a real site: only the scaffolded posts page used getSeoMeta; four hand-written collection pages (albums, interviews, covers, collabs) ignored the panel entirely. Editors had filled SEO titles/descriptions that were never rendered, and the noindex toggle did nothing.

Suggestions (any of)

  1. Docs: add a prominent gotcha in site-features.md — "the SEO panel is only honored if your page calls getSeoMeta; hand-written title/description bypass it silently." (Happy to PR this — see below.)
  2. Ergonomic helper: a <SeoHead entry={...} defaults={{ title, description, image }} /> component, or let getSeoMeta accept defaultTitle/defaultDescription. Today its only fallbacks are data.title/data.excerpt, so authors with computed titles (e.g. "Maeta — {title} (cover of {artist})") must drop down to getContentSeo and merge panel-vs-default by hand.
  3. Dev-mode warning: when an entry has non-empty data.seo fields but the rendered page never read them, log a warning in dev.

Environment

  • emdash (current main), Astro + Cloudflare Workers template.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions