Repository navigation
Improve SEO discoverability and add extensive accessibility - #22
Merged
Merged
Conversation
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
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.
dinooo13
commented
May 6, 2026
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.
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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 explicith1on every page) — both to comply with WCAG and because Google uses accessibility signals as a quality input.SEO
nuxt-og-imagewith@nuxtjs/seo, which bundlesnuxt-sitemap,nuxt-robots,nuxt-schema-org,nuxt-og-image, andnuxt-link-checker.sitemap.xml(verified — lists all 10 routes withlastmod).robots.txtthat includes the sitemap reference (the static one inpublic/was removed).Person(withsameAsto GitHub/LinkedIn),WebSite,WebPage, plusOrganizationfor eventim Tech.NUXT_PUBLIC_GOOGLE_SITE_VERIFICATION(documented in.env.example).og:type,og:locale,twitter:summary_large_image,author, androbots: index,follow,max-image-preview:largemeta.NuxtSeoSatoriOG template intoapp/components/OgImage/(required bynuxt-og-imagev6 for production).Accessibility
<main id="main-content">.<header role="banner">witharia-label="Primary"nav,<footer role="contentinfo">with a labelled social<nav>,<ul>/<ol>witharia-labelfor focus, experience, labs, and speaking lists.<h1>on every page — the homepage hero previously had none, which was likely the single biggest miss for both SEO and screen readers.aria-controlson the experience expand button,aria-hiddenon decorative timeline dots.:focus-visibleoutline andprefers-reduced-motionsupport in CSS.Test plan
pnpm lintpassespnpm typecheckpassespnpm generatesucceeds;sitemap.xmlandrobots.txtare produced and contain all routes<h1>, skip link, canonical,og:image, and the full schema graphNUXT_PUBLIC_GOOGLE_SITE_VERIFICATION, then submithttps://fmeyer.dev/sitemap.xmlhttps://claude.ai/code/session_013ru7eYwrehyae7SzggqMZ5
Generated by Claude Code