Next.js technical SEO checklist (App Router)

Most broken SEO on App Router sites is boring: wrong canonical, missing sitemap route, stale OG image, or metadata that never varies per page.
If you sell templates, buyers notice when your own site gets this right: it is a quiet trust signal.
Checklist below is App Router specific.
1) Metadata defaults (per route)
Your site should have:
- A clear title template
- A unique description per page
- Open Graph and Twitter card defaults
In App Router, this is typically done using export const metadata and generateMetadata() for dynamic pages like blog posts.
2) Canonical URLs (avoid duplicates)
Always set canonicals for:
- Blog index (
/blog) - Blog posts (
/blog/[slug]) - Template pages (
/saasforge-ai)
This prevents duplicate content issues when URLs can be reached through multiple paths.
3) robots.txt (don’t accidentally block your site)
You want to:
- Allow crawling for public pages
- Block webhooks/API routes from indexing
- Point crawlers to your sitemap
In Next.js, the clean approach is to add src/app/robots.ts.
4) sitemap.xml (make indexing easy)
A sitemap should include:
- Marketing pages (
/, templates) - Blog index + every blog post
- Documentation pages (if they’re public)
In Next.js, add src/app/sitemap.ts and generate entries from your route configs.
5) Open Graph images (don’t ship broken share cards)
If your metadata references a missing static image, you’ll get ugly shares and lower click-through rates.
Prefer a generated OG image via src/app/opengraph-image.tsx so you don’t depend on a binary in public/.
6) Structured data (JSON-LD)
At a minimum:
Organization+WebSiteon the root layoutBlogPostingfor blog postsTechArticlefor docs pages
Structured data won’t magically rank you, but it improves clarity for crawlers and can enhance rich results.
7) Content hygiene (the part people skip)
- One
<h1>per page - Clean headings (
h2,h3) that match sections - Descriptions that match the actual page content
- Internal links to your key pages (templates, docs)
8) Measure and iterate
SEO is a feedback loop. Set up:
- Search Console
- Analytics (events for template clicks)
- Error monitoring (broken links hurt)
If you want to see how Boilerlykit structures metadata, sitemaps, and blog content, SaaSForge Starter is the cleanest reference: SEO is wired end-to-end on day one (metadata, OG images, sitemap, RSS, JSON-LD) without the rest of a full SaaS stack getting in the way. The full rationale (Next.js 16, Tailwind v4, Supabase, Stripe, Polar) lives on our tech stack page, and SaaSForge AI's SEO docs cover the opinionated extensions.