Notes from finishing Next.js's official SEO Fundamentals course, and the concrete changes I made to this site's metadata, sitemap, and structured data afterward.
I recently finished the SEO Fundamentals course on nextjs.org/learn and posted about it on X — mostly as a note to future me. A few days later I went back through this portfolio and fixed the things the course made obvious I'd been getting wrong.
The course frames generateMetadata as the first thing a crawler sees, not
a nice-to-have. I'd been shipping pages with a generic title and no
per-route description. Every route on this site now exports its own
metadata, including Open Graph and Twitter card fields, instead of
inheriting one root default.
Static share images go stale the moment a title changes. I moved this site to a per-page dynamic OG image route so link previews on Twitter/X, Slack, and LinkedIn always match the actual page content — no manual re-export step to forget.
Adding a JSON-LD entity graph (Person, WebSite, BlogPosting) took an
afternoon and is one of the more mechanical parts of the course. It's also
one of the highest-leverage: it's how a search engine understands who
wrote a post and what it's about, not just what the text says.
A stale sitemap quietly stops new pages from getting discovered. This blog
is generated from MDX files, so the sitemap now derives from the same
getBlogPosts() call the blog index uses — a new post can't ship without
also appearing in the sitemap.
If you're building on Next.js, the course is free and takes an evening: nextjs.org/learn/seo. Source for this site, including the SEO work described above, is on GitHub. I post shorter updates like this as I go on X/@_naman14.