SEO Implementation & Audit
Final technical SEO implementation and comprehensive audit.
Prerequisites
-
All pages built and content optimized
-
docs/sitemap.md and docs/seo-strategy.md exist
Workflow
-
Audit All Pages - Check every page for SEO requirements
-
Generate Technical Files - sitemap.xml, robots.txt
-
Add Schema.org - JSON-LD structured data
-
Configure Social - Open Graph, Twitter cards
-
Final Verification - Comprehensive checklist
Full Site Audit Checklist
Per-Page Verification
For EACH page in docs/sitemap.md, verify:
Content:
-
H1 contains primary keyword
-
Only ONE H1 per page
-
H2/H3 include secondary keywords
-
Keyword density 1-2%
-
Minimum 300 words content
Meta Tags:
-
Title tag 50-60 characters
-
Title contains primary keyword
-
Meta description 150-160 characters
-
Meta description has CTA
Images:
-
All images have alt text
-
Alt text is keyword-relevant
-
Images are optimized (WebP)
Links:
-
Internal links to key pages
-
No broken links
-
Anchor text is descriptive
Technical SEO Files
sitemap.xml (app/sitemap.ts)
import { MetadataRoute } from 'next'
export default function sitemap(): MetadataRoute.Sitemap { const baseUrl = 'https://domain.com'
return [
{ url: baseUrl, lastModified: new Date(), changeFrequency: 'weekly', priority: 1 },
{ url: ${baseUrl}/leistungen, lastModified: new Date(), changeFrequency: 'monthly', priority: 0.8 },
// All pages from docs/sitemap.md
]
}
robots.txt (public/robots.txt)
User-agent: * Allow: / Disallow: /api/ Disallow: /_next/
Sitemap: https://domain.com/sitemap.xml
Schema.org Structured Data
Add to layout or pages:
LocalBusiness (Homepage):
{ "@context": "https://schema.org", "@type": "LocalBusiness", "name": "Company Name", "address": { "@type": "PostalAddress", "streetAddress": "Street", "addressLocality": "Zürich", "postalCode": "8000", "addressCountry": "CH" }, "telephone": "+41 XX XXX XX XX", "url": "https://domain.com", "priceRange": "$$" }
Service (Service Pages):
{ "@context": "https://schema.org", "@type": "Service", "name": "Webdesign", "provider": { "@type": "LocalBusiness", "name": "Company" }, "areaServed": "Zürich", "description": "Service description" }
FAQPage (FAQ Sections):
{ "@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [{ "@type": "Question", "name": "Question?", "acceptedAnswer": { "@type": "Answer", "text": "Answer" } }] }
Open Graph & Twitter
Add to page metadata:
export const metadata: Metadata = { title: 'Page Title | Brand', description: 'Description with keyword', openGraph: { title: 'Page Title | Brand', description: 'Description', url: 'https://domain.com/page', siteName: 'Brand', images: [{ url: '/og-image.png', width: 1200, height: 630 }], locale: 'de_CH', type: 'website', }, twitter: { card: 'summary_large_image', title: 'Page Title', description: 'Description', images: ['/og-image.png'], }, }
Final Ranking Checklist
Technical:
-
sitemap.xml generated and accessible
-
robots.txt allows crawling
-
SSL certificate active (HTTPS)
-
Mobile responsive
-
Page speed < 3 seconds
-
No console errors
Content:
-
All pages have unique title tags
-
All pages have unique meta descriptions
-
All H1s are unique and keyword-optimized
-
No duplicate content
-
No thin content (< 300 words)
Structured Data:
-
LocalBusiness schema on homepage
-
Service schema on service pages
-
FAQPage schema on FAQ sections
-
BreadcrumbList schema (optional)
Social:
-
Open Graph images created (1200x630)
-
OG tags on all pages
-
Twitter card tags on all pages
Output
-
app/sitemap.ts created
-
public/robots.txt created
-
Schema.org components added
-
OG images configured
-
All pages verified for SEO compliance