Skip to content

fix(seo): summary_large_image social card + home og:image, drop title em-dash#20

Merged
Manuel10i merged 1 commit into
mainfrom
fix/social-card-and-title-emdash
Jul 6, 2026
Merged

fix(seo): summary_large_image social card + home og:image, drop title em-dash#20
Manuel10i merged 1 commit into
mainfrom
fix/social-card-and-title-emdash

Conversation

@Manuel10i

Copy link
Copy Markdown
Owner

Problem

(Website-Audit state.md 2026-07-02 + 2026-07-03)

  1. Social share cards are broken. The home page set no og:image and no twitter:card, so X/Twitter fell back to the tiny bild-less summary thumbnail and other platforms rendered shared links without a preview image. A CTR leak on exactly the off-page channels (Reddit/X/Slack/WhatsApp/AlternativeTo/listicles) where we want reach.
  2. Em-dash in the SEO title. The marketing landing page override and meta.title / meta.ogTitle in all four locales read PackedPlaces.com — See How Crowded..., an em-dash on the SEO-visible <title> and og:title, against the no-em-dash copy rule.

What was built

  • GET /api/og: a generated 1200x630 default card (next/og ImageResponse), mirroring the existing /api/og/destination/[slug] route (same paper background, grid, Fraunces, shared crowd palette). Shows the brand, the tagline, and a quiet-to-packed crowd ramp built from crowd-palette.
  • Root layout metadata: openGraph.images now points at /api/og (resolved against the existing metadataBase), and twitter.card = summary_large_image with title/description. twitter.images is intentionally omitted so X falls back to og:image; destination pages that already set their own og:image therefore get the correct large card automatically, without needing to touch twitter.
  • Title em-dash: .com — changed to .com: in (marketing)/page.tsx and in meta.title + meta.ogTitle across en/de/es/fr.

What was verified

  • npx tsc --noEmit: clean.
  • npx eslint on the touched files: clean.
  • next build: compiles successfully (7.1s), then OOM-killed in the TypeScript phase in this memory-limited environment (exit 137), so full build output is not available here; tsc + eslint stand in as verification. The new /api/og route uses the same next/og API as the already-shipped destination OG route.
  • No em-dashes introduced. Note: other message namespaces still contain em-dashes in body copy; those are out of scope for this title/social-card PR and left untouched.

Co-Authored-By: Claude noreply@anthropic.com

Social share cards rendered as the tiny bild-less "summary" thumbnail
because twitter:card was never set and no og:image existed on the home
page. Add a generated 1200x630 card (next/og) as the default og:image in
the root layout and set twitter:card=summary_large_image. twitter.images
is omitted so X falls back to og:image, letting destination pages keep
their own /api/og/destination card without touching twitter.

Also drop the em-dash from the SEO-visible title override in the
marketing landing page and from meta.title/meta.ogTitle in all four
locales (en/de/es/fr), per the no-em-dash copy rule.

Co-Authored-By: Claude <noreply@anthropic.com>
@Manuel10i Manuel10i merged commit 66fa8f5 into main Jul 6, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant