The Developer's Technical SEO Audit Checklist: 12 Checks Before Launch
A battle-tested technical SEO pre-launch checklist for modern web apps. Covers Next.js metadataBase, crawler access, canonical integrity, SSR hydration, Core Web Vitals, and structured data validation.
Launching a web application without a technical SEO review frequently leads to months of delayed indexing, duplicate content confusion, and squandered search visibility.
While traditional SEO advice often revolves around keyword research and WordPress plugins, modern web development—built on React, Next.js App Router, edge runtimes, and client hydration—introduces distinct architectural failure modes that generic checklists fail to address.
This guide outlines 12 actionable pre-launch technical checks specifically tailored for frontend and full-stack engineers. Every item distinguishes between strict mandatory requirements (blocking search indexing or causing duplicate content) and recommended best practices.
Clean Crawler Access (robots.txt)
Search engines first fetch /robots.txt before discovering pages. A common production misconfiguration is carrying over staging directives (such as Disallow: /) into production, which completely blocks search engines from crawling the site. Conversely, failing to disallow internal API endpoints, rate-limited webhook handlers, and private dashboard pages wastes crawler budget and risks indexing sensitive URLs.
import type { MetadataRoute } from 'next';
export default function robots(): MetadataRoute.Robots {
const baseUrl = process.env.NEXT_PUBLIC_SITE_URL || 'https://example.com';
return {
rules: [
{
userAgent: '*',
allow: ['/', '/blog', '/blog/*'],
disallow: ['/dashboard/', '/api/', '/auth/'],
},
],
sitemap: `${baseUrl}/sitemap.xml`,
};
}Request your production URL at /robots.txt using curl or a browser. Verify HTTP 200 status, confirm Allow/Disallow paths, and verify the Sitemap URL points to your canonical domain.
Absolute XML Sitemap Validation
Your sitemap.xml is the authoritative index provided to search engines. Every URL listed in sitemap.xml must be absolute (including the https protocol), canonical, and return an HTTP 200 OK status. Never include redirected URLs, duplicate aliases, authenticated dashboard URLs, or staging domains.
import type { MetadataRoute } from 'next';
export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
const origin = process.env.NEXT_PUBLIC_SITE_URL || 'https://example.com';
const articles = await getPublishedArticles();
const blogEntries = articles.map((post) => ({
url: `${origin}/blog/${post.slug}`,
lastModified: new Date(post.updatedAt),
changeFrequency: 'weekly' as const,
priority: 0.7,
}));
return [
{ url: origin, lastModified: new Date(), changeFrequency: 'daily', priority: 1.0 },
{ url: `${origin}/blog`, lastModified: new Date(), changeFrequency: 'daily', priority: 0.8 },
...blogEntries,
];
}Open /sitemap.xml in a browser or XML validator. Check that all URLs use the canonical domain, have no broken paths, and parse without XML formatting errors.
Self-Referencing Canonical URLs
Canonical tags tell search engines which URL represents the single authoritative source of truth. Without canonical tags, search engines may treat tracking parameters (e.g. ?utm_source=twitter or ?ref=producthunt), trailing slash variations (/blog vs /blog/), and protocol variants (http vs https) as separate duplicate pages, diluting page authority.
export async function generateMetadata({ params }: Props): Promise<Metadata> {
const { slug } = await params;
const post = getArticleBySlug(slug);
if (!post) return {};
return {
title: post.title,
description: post.description,
alternates: {
canonical: `/blog/${post.slug}`,
},
};
}Inspect the rendered HTML `<head>` on your target pages and verify `<link rel="canonical" href="https://..." />` matches the exact intended canonical URL.
Next.js metadataBase & Absolute URLs
In Next.js App Router, omitting `metadataBase` in root layout causes Next.js to log build warnings and prevents relative metadata URLs (like Open Graph images or canonical paths) from resolving to valid absolute URLs. Setting `metadataBase: new URL(origin)` guarantees that social cards and search engines receive fully qualified URLs.
export const metadata: Metadata = {
metadataBase: new URL(
process.env.NEXT_PUBLIC_SITE_URL || 'https://site-sensei-virid.vercel.app'
),
title: {
default: 'SiteSensei — Free AI-Powered Website Audit Tool',
template: '%s | SiteSensei',
},
};Run `npm run build` and ensure zero warnings regarding missing metadataBase. Check social card previewers or inspect `<meta property="og:image" />` to verify full URLs.
Private Route Shielding & Noindex Hygiene
Search engines should only index public marketing pages and published editorial content. User workspace routes (/dashboard), guest audit executions, and authentication forms must be protected with `robots: { index: false, follow: false }` to avoid indexing temporary user audits or leaking customer URLs into search results.
export const metadata: Metadata = {
robots: {
index: false,
follow: false,
googleBot: {
index: false,
follow: false,
},
},
};Inspect the `<head>` of any dashboard or authenticated route. Verify `<meta name="robots" content="noindex, nofollow" />` is present.
SSR Output & Hydration Crawlability
While Googlebot executes JavaScript, it renders pages in a two-stage process. If primary headings, article bodies, or navigational links are rendered only after client-side state loads (`useEffect` or `fetch` in client components), initial indexing can be delayed or incomplete. Render core content in React Server Components by default.
# Verify raw server HTML contains your H1 and core text without running JavaScript
curl -sL https://yoursite.com/blog/my-post | grep -E "(<h1|<article|rel=\"canonical\")"Disable JavaScript in Chrome DevTools (Command Palette > 'Disable JavaScript') and reload the page. Confirm the article text, headings, and navigation render visibly.
Single Canonical Host & Clean Redirects
Having both `http://yoursite.com`, `https://yoursite.com`, and `https://www.yoursite.com` return 200 OK causes search engines to split page ranking signals across three domains. Enforce a single primary origin and configure your hosting provider or edge middleware to redirect secondary variants with a single 308/301 hop.
# Check redirect behavior with curl:
curl -I http://yoursite.com
# Expected: HTTP/1.1 301 Moved Permanently -> https://yoursite.comTest all protocol and subdomain permutations (`http://`, `http://www.`, `https://www.`) using `curl -IL`. Ensure they resolve to the primary canonical URL in exactly 1 redirect hop.
Semantic Internal Links vs. Dead 404s
Search engines discover your site structure through internal links. Links pointing to nonexistent pages (like placeholder company pages or unreleased tools) trigger 404 errors during crawling, leak link equity, and create poor user experiences. Use semantic `<Link href="...">` tags with descriptive anchor text rather than generic 'click here' labels.
// Avoid: <a href="/tools/seo-checker"> (returns 404 if tool page doesn't exist)
// Correct: Deep-link directly to working tool anchor on the page
<Link
href="/#audit-input"
className="text-sm text-slate-400 hover:text-white"
>
Run Instant SEO Audit
</Link>Audit every link in Header and Footer using an automated crawler or browser inspection. Verify zero 404 responses on internal navigation.
Core Web Vitals: LCP, CLS, and INP Readiness
Google's Core Web Vitals directly evaluate user experience signals. Ensure your hero banner uses `next/image` with `priority` and `fetchpriority="high"` to optimize Largest Contentful Paint (LCP). Reserve explicit image dimensions or CSS aspect ratios to eliminate Cumulative Layout Shift (CLS). Keep event callbacks lightweight to ensure responsive Interaction to Next Paint (INP).
<Image
src="/images/hero-bg.png"
alt=""
fill
priority
quality={85}
className="object-cover object-top"
/>Run Google PageSpeed Insights or Chrome DevTools Lighthouse audit. Target scores of 90+ on mobile and desktop, verifying LCP < 2.5s and CLS < 0.1.
Schema.org JSON-LD Verification
Structured data helps search engines interpret the entities, authors, and purpose of your application. Validate that all schema URLs match your active canonical domain, ensure logo assets resolve to real image files, and include BreadcrumbList and Article schemas on editorial content.
const articleSchema = {
'@context': 'https://schema.org',
'@type': 'TechArticle',
headline: post.title,
description: post.description,
datePublished: post.publishedAt,
dateModified: post.updatedAt,
author: {
'@type': 'Organization',
name: post.author.name,
},
};
<script
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(articleSchema) }}
/>Paste your rendered HTML into Google's Rich Results Test (search.google.com/test/rich-results) and Schema.org Validator to confirm zero syntax errors or missing required fields.
Security Headers as a Quality Signal
While security headers are not direct ranking algorithms, website security and user safety are critical quality signals. Configuring Strict-Transport-Security (HSTS), X-Content-Type-Options (nosniff), and X-Frame-Options prevents clickjacking, MIME-type sniffing, and protocol downgrade attacks.
const securityHeaders = [
{ key: 'Strict-Transport-Security', value: 'max-age=63072000; includeSubDomains; preload' },
{ key: 'X-Content-Type-Options', value: 'nosniff' },
{ key: 'X-Frame-Options', value: 'SAMEORIGIN' },
{ key: 'Referrer-Policy', value: 'origin-when-cross-origin' },
];Test your domain with `curl -I https://yoursite.com` or run a Site Sensei security scan to verify header presence and configuration grades.
End-to-End Automated Pre-Launch Verification
Manual spot-checks frequently overlook subtle regressions like broken viewport meta tags, missing ARIA form labels, unminified assets, or missing image alt text. Running an automated audit engine catches cross-disciplinary defects in seconds.
Run Site Sensei's free 5-pillar website audit against your staging or preview deployment before pointing production DNS.
Pre-Launch Verification Matrix
| # | Check Item | Category | Priority | Expected Outcome |
|---|---|---|---|---|
| 1 | Clean Crawler Access (robots.txt) | Crawlability | Mandatory | Ensure search engine bots can discover public content while excluding private API endpoints and authenticated user dashboards. |
| 2 | Absolute XML Sitemap Validation | Crawlability | Mandatory | Provide a machine-readable sitemap.xml containing all canonical, indexable 200 OK URLs with valid timestamps. |
| 3 | Self-Referencing Canonical URLs | Indexability | Mandatory | Declare explicit canonical tags on every indexable page to prevent duplicate content across URL parameters and trailing slashes. |
| 4 | Next.js metadataBase & Absolute URLs | Metadata | Mandatory | Configure metadataBase in your root layout so Next.js correctly computes absolute Open Graph and canonical links. |
| 5 | Private Route Shielding & Noindex Hygiene | Indexability | Mandatory | Enforce robots noindex, nofollow on customer dashboards, auth flows, and ephemeral test results. |
| 6 | SSR Output & Hydration Crawlability | Rendering | Mandatory | Verify critical page content, headings, and internal links exist in the raw server-rendered HTML before JavaScript hydration. |
| 7 | Single Canonical Host & Clean Redirects | Architecture | Mandatory | Enforce one canonical hostname (www vs non-www, HTTP to HTTPS) with immediate 301/308 redirects, avoiding redirect chains. |
| 8 | Semantic Internal Links vs. Dead 404s | Architecture | Mandatory | Audit header, footer, and inline links. Replace placeholder URLs with verified routes and eliminate broken 404s. |
| 9 | Core Web Vitals: LCP, CLS, and INP Readiness | Performance | Recommended | Optimize hero asset loading (LCP), reserve explicit image dimensions (CLS), and yield the main thread for user interactions (INP). |
| 10 | Schema.org JSON-LD Verification | Structured Data | Recommended | Provide validated Schema.org structured data (Organization, WebApplication, TechArticle, BreadcrumbList) matching your canonical origin. |
| 11 | Security Headers as a Quality Signal | Security | Recommended | Deploy HSTS, X-Content-Type-Options, X-Frame-Options, and CSP to protect users and signal high engineering standards. |
| 12 | End-to-End Automated Pre-Launch Verification | Verification | Mandatory | Execute an automated 5-pillar audit across SEO, performance, accessibility, UI/UX, and security before announcing launch. |
Conclusion & Next Steps
Technical SEO is not a one-time marketing task; it is an engineering discipline that guarantees search engines can crawl, understand, and index your website reliably.
By verifying these 12 checks before production launch, you safeguard your web application from avoidable indexing failures, eliminate duplicate content traps, and establish an unshakeable foundation for organic growth.