Skip to content

Improve SEO discoverability and add extensive accessibility - #22

Merged
dinooo13 merged 6 commits into
mainfrom
claude/improve-seo-google-CoJya
May 6, 2026
Merged

dinooo13 merged 6 commits into
mainfrom
claude/improve-seo-google-CoJya

Conversation

@dinooo13

@dinooo13 dinooo13 commented May 5, 2026

Copy link
Copy Markdown
Owner

Summary

The site wasn't being indexed by Google. The biggest gaps were a missing sitemap.xml, no JSON-LD structured data, and no Search Console verification path. While in there, this PR also adds extensive accessibility improvements (skip link, landmarks, ARIA, semantic lists, an explicit h1 on every page) — both to comply with WCAG and because Google uses accessibility signals as a quality input.

SEO

  • Replaces standalone nuxt-og-image with @nuxtjs/seo, which bundles nuxt-sitemap, nuxt-robots, nuxt-schema-org, nuxt-og-image, and nuxt-link-checker.
  • Auto-generated sitemap.xml (verified — lists all 10 routes with lastmod).
  • Module-generated robots.txt that includes the sitemap reference (the static one in public/ was removed).
  • JSON-LD on every page: Person (with sameAs to GitHub/LinkedIn), WebSite, WebPage, plus Organization for eventim Tech.
  • Optional Google Search Console verification via NUXT_PUBLIC_GOOGLE_SITE_VERIFICATION (documented in .env.example).
  • Added og:type, og:locale, twitter:summary_large_image, author, and robots: index,follow,max-image-preview:large meta.
  • Ejected the NuxtSeoSatori OG template into app/components/OgImage/ (required by nuxt-og-image v6 for production).

Accessibility

  • Skip-to-main-content link with focusable <main id="main-content">.
  • Semantic landmarks: <header role="banner"> with aria-label="Primary" nav, <footer role="contentinfo"> with a labelled social <nav>, <ul>/<ol> with aria-label for focus, experience, labs, and speaking lists.
  • Explicit <h1> on every page — the homepage hero previously had none, which was likely the single biggest miss for both SEO and screen readers.
  • aria-controls on the experience expand button, aria-hidden on decorative timeline dots.
  • :focus-visible outline and prefers-reduced-motion support in CSS.

Test plan

  • pnpm lint passes
  • pnpm typecheck passes
  • pnpm generate succeeds; sitemap.xml and robots.txt are produced and contain all routes
  • HTML output contains <h1>, skip link, canonical, og:image, and the full schema graph
  • After deploy: verify the site in Google Search Console using NUXT_PUBLIC_GOOGLE_SITE_VERIFICATION, then submit https://fmeyer.dev/sitemap.xml

https://claude.ai/code/session_013ru7eYwrehyae7SzggqMZ5


Generated by Claude Code

claude added 2 commits May 5, 2026 20:30
Replaces standalone nuxt-og-image with @nuxtjs/seo to add automatic
sitemap.xml, robots.txt with sitemap reference, and JSON-LD
(Person/WebSite/WebPage/Organization) so Google can discover and
understand the site. Adds an opt-in Google Search Console verification
meta tag via NUXT_PUBLIC_GOOGLE_SITE_VERIFICATION.

Accessibility: adds a skip-to-main-content link, semantic <header>/
<nav>/<footer> landmarks with ARIA labels, an explicit <h1> on every
page (the homepage previously had none), list semantics for the focus,
experience, labs and speaking sections, focus-visible outlines, and
prefers-reduced-motion support.

https://claude.ai/code/session_013ru7eYwrehyae7SzggqMZ5
The NuxtSeo.satori.vue template is generated by `nuxt-og-image eject`
and doesn't follow the repo's stylistic rules (single quotes, indent,
attribute-per-line). Treat it as vendored code rather than rewriting
the upstream template.

https://claude.ai/code/session_013ru7eYwrehyae7SzggqMZ5
Repository owner deleted a comment from claude Bot May 5, 2026
@github-actions
github-actions Bot temporarily deployed to preview-pr-22 May 6, 2026 22:37 Destroyed
The previous merge from main left literal conflict markers in app/app.vue
and dropped the comma between the new googleSiteVerification entry and
the existing noindex entry in runtimeConfig.public, both of which broke
lint, typecheck, and generate.

Combine the SEO robots meta with the noindex preview toggle so previews
still emit noindex,nofollow while production keeps index,follow,
max-image-preview:large.
@github-actions
github-actions Bot temporarily deployed to preview-pr-22 May 6, 2026 22:43 Destroyed
Comment thread nuxt.config.ts Outdated
Comment thread app/app.vue Outdated
@github-actions
github-actions Bot temporarily deployed to preview-pr-22 May 6, 2026 22:45 Destroyed
When NUXT_APP_BASE_URL is set (e.g. /pr-22/ for preview deploys), the
literal route strings 404 because they don't pick up the base URL prefix.
@nuxtjs/seo (nuxt-sitemap, nuxt-robots) already prerenders both routes
with the correct base URL, so the manual entries are redundant and break
preview generation.
@github-actions
github-actions Bot temporarily deployed to preview-pr-22 May 6, 2026 22:53 Destroyed
@github-actions
github-actions Bot temporarily deployed to preview-pr-22 May 6, 2026 23:00 Destroyed
@github-actions
github-actions Bot temporarily deployed to preview-pr-22 May 6, 2026 23:03 Destroyed
@dinooo13
dinooo13 merged commit b85546f into main May 6, 2026
8 of 10 checks passed
@dinooo13
dinooo13 deleted the claude/improve-seo-google-CoJya branch May 7, 2026 21:34

This branch was successfully deployed

No deployments
preview-pr-22 — 1fd295fa Deployed May 6, 2026 by github-actions[bot]
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