Skip to content

Add structured data, content artifacts, and improve SEO#48

Merged
dinooo13 merged 6 commits into
mainfrom
claude/review-seo-geo-dJYXO
May 16, 2026
Merged

Add structured data, content artifacts, and improve SEO#48
dinooo13 merged 6 commits into
mainfrom
claude/review-seo-geo-dJYXO

Conversation

@dinooo13
Copy link
Copy Markdown
Owner

Summary

This PR enhances SEO and content discoverability by adding comprehensive structured data (JSON-LD schema.org), generating content artifacts for LLM indexing and RSS feeds, and improving OG image handling. It also adds related content recommendations on detail pages.

Key Changes

  • Structured Data: Added buildLabCreativeWorkSchema() and buildTalkEventSchema() utilities to generate schema.org JSON-LD for labs and talks, including breadcrumb navigation on all detail pages
  • Content Artifacts: New build script (generate-content-artifacts.ts) that generates:
    • llms.txt and llms-full.txt for LLM indexing (Claude, Perplexity, etc.)
    • rss.xml feed for labs and speaking updates
  • Sitemap Enhancement: Added sitemap-lastmod.ts plugin to use actual YAML content dates instead of file modification times for accurate freshness signals
  • Related Content: Implemented relatedLabs and relatedTalks computed properties that recommend similar content based on tag overlap and recency
  • OG Images: Replaced generic NuxtSeoSatori template with new Default.satori.vue component for cleaner, more consistent OG image generation
  • Detail Page Improvements:
    • Wrapped content in <article> semantic tags
    • Added author byline with link to identity section
    • Added ISO date attributes to <time> elements for better accessibility
    • Reorganized lab detail layout with "Next steps" and "Note" sections
    • Added related content sections at the bottom of detail pages
  • SEO Meta: Enhanced usePageSeo() to include ogImageAlt for better OG image accessibility
  • Dependencies: Added yaml package for content parsing in build scripts

Implementation Details

  • Schema.org schemas include proper date formatting, author references, and event location/duration parsing for talks
  • Related content algorithm prioritizes tag overlap, then falls back to chronological order
  • Build artifacts are only generated during static site generation (prerender), not during development
  • All date handling accounts for timezone-aware ISO formatting and validation
  • Sitemap plugin hooks into @nuxtjs/sitemap to override auto-generated lastmod values

https://claude.ai/code/session_013i4bC4y9gm7nU8nmMwfCq4

claude added 6 commits May 16, 2026 16:37
Replace the default Nuxt SEO Satori template with a branded layout
matching the site's blue accent and Fabian Meyer's positioning.
Standardise the component name as 'Default' so defineOgImage calls
resolve unambiguously.
Talk detail pages now emit schema.org Event JSON-LD (with start/end
date, location, performer, organizer, language, attendance mode) and
a BreadcrumbList for rich-result eligibility. The buildTalkEventSchema
helper maps the existing YAML fields and handles both online and
in-person locations.

Also unify defineOgImage() calls to the string component form so
typing matches the OgImageComponents registry.
Lab detail pages now emit schema.org CreativeWork or SoftwareSourceCode
JSON-LD (with author, dateCreated, codeRepository, keywords, status) and
a BreadcrumbList. Labs and Speaking index pages emit BreadcrumbList plus
an ItemList describing every entry — both improve rich-result eligibility
and give LLM crawlers a clean entity graph.
Adds a Nitro close hook that reads YAML content directly and emits:
- /llms.txt (concise URL + summary index, https://llmstxt.org)
- /llms-full.txt (full prose body of every lab and talk)
- /rss.xml (combined feed, RSS 2.0)

These help LLM-powered search and AI answer engines surface labs and
talks without having to render JavaScript. Also wires a <link
rel='alternate' type='application/rss+xml'> hint in app.vue, moves the
OG image registration into usePageSeo so every page gets a unique
per-route preview with title/description props, and adds ogImageAlt
/ twitterImageAlt for accessibility on social platforms.
…ross-links

Lab and talk detail pages now:
- wrap their body in <article> for landmark clarity
- render dates inside <time datetime> with ISO-8601 values
- show a 'By Fabian Meyer · <date>' byline that links to the
  homepage #identity anchor (matches schema.org performer/author)
- end with a 'Related labs' / 'More talks' section so crawlers and
  readers can pivot to neighbouring content

A Nitro plugin overrides @nuxtjs/sitemap's autoLastmod (file mtime,
always today) with the real publish date pulled from each entry's
YAML, so search engines get accurate per-URL freshness signals.
…inks

- theme-color now uses two <meta> tags scoped by prefers-color-scheme,
  which is the cross-browser standard and avoids running the color-mode
  computation in app.vue
- rel='me' links to GitHub and LinkedIn enable identity verification
  on profiles that accept linked-back rel-me discovery
@dinooo13 dinooo13 merged commit 0026abe into main May 16, 2026
8 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.

2 participants