SEO Audit Checklist: Complete Guide to Auditing Your Website
Learn how to perform a comprehensive SEO audit that identifies problems and opportunities. This step-by-step checklist covers technical SEO, on-page optimization, content, and backlinks.
Introduction: Why SEO Audits Matter
An SEO audit is a health check for your website’s search performance. It reveals what’s working, what’s broken, and where opportunities lie.
Regular audits are essential because:
- Google’s algorithm constantly changes
- Websites accumulate technical debt
- Competitors evolve their strategies
- New content creates new issues
- Performance degrades over time
Most businesses either never audit their SEO or only do so when traffic crashes. By then, months of potential revenue have been lost.
This guide provides a comprehensive checklist for auditing your website’s SEO, finding issues, and prioritizing fixes.
SEO Audit Overview
When to Audit
Minimum frequency: Annually for established sites Recommended: Quarterly for active sites Critical times: Before site redesign, after traffic drops, when changing strategy
Tools You’ll Need
Free tools:
- Google Search Console
- Google Analytics 4
- Google PageSpeed Insights
- Bing Webmaster Tools
- Screaming Frog (free up to 500 URLs)
Paid tools (optional but helpful):
- Ahrefs, SEMrush, or Moz for backlinks and keywords
- Screaming Frog (unlimited)
- Sitebulb
- DeepCrawl
Audit Components
- Technical SEO
- On-page SEO
- Content quality
- User experience
- Backlink profile
- Competitive analysis
Technical SEO Audit
Crawlability and Indexability
Check robots.txt:
- Navigate to yoursite.com/robots.txt
- Ensure you’re not blocking important pages
- Verify search engines can access CSS/JS
- Check for outdated disallow rules
Common mistakes:
# BAD - blocks entire site
User-agent: *
Disallow: /
# GOOD - blocks admin only
User-agent: *
Disallow: /admin/
Check XML sitemap:
- Verify sitemap exists at yoursite.com/sitemap.xml
- All important pages included
- No redirects or 404s in sitemap
- Submitted to Search Console
- Updated regularly (dynamic for large sites)
Index coverage:
- Google Search Console > Index > Coverage
- Review indexed pages vs. submitted
- Identify excluded pages and why
- Fix errors (404s, server errors, redirect errors)
- Address warnings
Canonical tags:
- Every page should have canonical tag
- Self-referencing canonical on unique pages
- Points to preferred version of duplicate content
- HTTPS canonical, not HTTP
- No redirect chains in canonicals
Meta robots tags:
- Check for unintended noindex tags
- Verify important pages are indexable
- Review nofollow usage
- Check for conflicting directives
Site Architecture
URL structure:
- Clean, descriptive URLs
- Logical hierarchy
- Hyphens, not underscores
- Lowercase only
- No unnecessary parameters
Good: yoursite.com/blog/seo-audit-guide Bad: yoursite.com/page.php?id=123&cat=blog
Internal linking:
- Logical link structure
- Important pages well-linked
- Reasonable link depth (max 3 clicks from home)
- No orphan pages (pages with no internal links)
- Descriptive anchor text
Site depth:
- Important pages within 3 clicks of homepage
- Flat structure for small sites
- Organized hierarchy for large sites
Pagination and faceted navigation:
- Proper rel=”next” and rel=”prev” (if used)
- Canonical strategy for filters
- Parameter handling in Search Console
- Avoid duplicate content from sorting/filtering
Mobile Optimization
Mobile-friendliness test:
- Use Google’s Mobile-Friendly Test
- Verify responsive design
- Check tap targets (minimum 48px)
- Ensure text is readable without zooming
- No horizontal scrolling
Mobile usability issues (Search Console):
- Review Mobile Usability report
- Fix errors (clickable elements too close, text too small, viewport not set)
- Test on actual mobile devices
Mobile-first indexing:
- Ensure mobile and desktop content parity
- Structured data on mobile version
- Meta tags on mobile version
- Same internal links on mobile
Page Speed
Core Web Vitals:
LCP (Largest Contentful Paint):
- Target: <2.5 seconds
- Measures loading performance
- Optimize images and server response
FID (First Input Delay) / INP (Interaction to Next Paint):
- Target: <100ms (FID) / <200ms (INP)
- Measures interactivity
- Minimize JavaScript execution
CLS (Cumulative Layout Shift):
- Target: <0.1
- Measures visual stability
- Set image dimensions, avoid injected content
Tools:
- PageSpeed Insights
- Search Console > Core Web Vitals report
- Chrome DevTools > Lighthouse
Speed optimization priorities:
- Optimize images (compress, modern formats, lazy load)
- Minimize CSS/JavaScript
- Enable compression (gzip/brotli)
- Leverage browser caching
- Use CDN for static assets
- Reduce server response time
- Eliminate render-blocking resources
HTTPS and Security
SSL certificate:
- Entire site on HTTPS
- Valid SSL certificate
- No mixed content warnings
- HTTPS canonical tags
- 301 redirects from HTTP to HTTPS
Security headers:
- X-Content-Type-Options
- X-Frame-Options
- Strict-Transport-Security
- Content-Security-Policy (optional but recommended)
Structured Data
Schema markup audit:
- Identify pages that should have schema
- Verify implementation correctness
- Test with Rich Results Test
- Check for errors in Search Console
- Ensure schema matches visible content
Common schema types:
- Organization
- Article
- Product
- Review/Rating
- FAQ
- How-to
- Local Business
- Breadcrumb
Validation:
- Use Google’s Rich Results Test
- Check Search Console for structured data errors
- Verify rich snippets appearing in search results
Duplicate Content
Find duplicates:
- Use “site:” search with quotes around unique content
- Check for www vs. non-www issues
- HTTP vs. HTTPS duplicates
- Trailing slash inconsistencies
- Parameter variations
Solutions:
- 301 redirects to preferred version
- Canonical tags
- Noindex on duplicate pages
- Parameter handling in Search Console
Crawl Errors
404 errors:
- Review in Search Console
- Fix important broken links
- 301 redirect old URLs with backlinks
- Custom 404 page with helpful navigation
Server errors (5xx):
- Identify and fix immediately
- Check server logs
- Ensure sufficient server resources
- Monitor uptime
Redirect chains and loops:
- Identify with Screaming Frog
- Update to direct redirects
- Fix redirect loops immediately
On-Page SEO Audit
Title Tags
Checklist:
- [ ] Every page has unique title
- [ ] Length: 50-60 characters
- [ ] Target keyword included (front-loaded)
- [ ] Compelling and click-worthy
- [ ] Matches page content
- [ ] Brand name included (usually at end)
- [ ] No keyword stuffing
Title tag formula: Primary Keyword – Secondary Keyword | Brand Name
Check for issues:
- Missing titles
- Duplicate titles
- Too long (truncated in SERPs)
- Too short (wasted opportunity)
- Generic titles (“Home”, “Services”)
Meta Descriptions
Checklist:
- [ ] Every important page has description
- [ ] Length: 150-160 characters
- [ ] Includes target keyword naturally
- [ ] Compelling call-to-action
- [ ] Accurately describes page
- [ ] Unique per page
Common issues:
- Missing descriptions
- Duplicate descriptions
- Too long or too short
- Generic or auto-generated
- Keyword stuffing
Header Tags (H1-H6)
H1 tags:
- [ ] One H1 per page
- [ ] Includes target keyword
- [ ] Describes page topic
- [ ] Unique per page
- [ ] Similar but not identical to title
Header hierarchy:
- [ ] Logical structure (H1 > H2 > H3)
- [ ] No skipped levels
- [ ] Keywords in headers naturally
- [ ] Descriptive and useful
Image Optimization
For each image:
- [ ] Descriptive file names (seo-audit-checklist.jpg not IMG_1234.jpg)
- [ ] Alt text describing image
- [ ] Appropriate file format (WebP > JPEG > PNG)
- [ ] Compressed for web
- [ ] Appropriate dimensions
- [ ] Lazy loading for below-fold images
- [ ] Responsive images (srcset)
Image audit checklist:
- Missing alt text
- Generic alt text (“image”, “photo”)
- Oversized images
- Unoptimized formats
- Missing images (broken src)
Content Quality
Length and depth:
- [ ] Sufficient content for topic (typically 1,500+ words for competitive topics)
- [ ] Comprehensive coverage
- [ ] Original content (not duplicate)
- [ ] Value to users
Keyword optimization:
- [ ] Target keyword in first 100 words
- [ ] Natural keyword usage throughout
- [ ] Related terms and synonyms
- [ ] No keyword stuffing
- [ ] LSI keywords included
Readability:
- [ ] Short paragraphs (2-4 sentences)
- [ ] Subheadings for scannability
- [ ] Bullet points and lists
- [ ] Readable font size
- [ ] Adequate white space
Freshness:
- [ ] Content is current and accurate
- [ ] Outdated content updated or removed
- [ ] Dates displayed where relevant
- [ ] Regular content updates
Internal Linking
Audit focus:
- [ ] Every page linked from at least one other page
- [ ] Important pages have more internal links
- [ ] Descriptive anchor text (not “click here”)
- [ ] Reasonable number of links per page
- [ ] Links to related content
- [ ] No broken internal links
URL Optimization
Best practices:
- [ ] Descriptive URLs
- [ ] Include target keyword
- [ ] Short and clean
- [ ] Hyphens between words
- [ ] Lowercase
- [ ] No stop words (the, and, of) unless necessary
- [ ] Match content hierarchy
Content Audit
Content Inventory
Catalog all content:
- URL
- Title
- Topic/category
- Publish date
- Last updated
- Word count
- Traffic (last 6 months)
- Conversions
- Backlinks
Content Performance Analysis
Identify:
- Top performers (keep, update, expand)
- Declining performers (refresh or retire)
- Non-performers (improve or delete)
- Keyword cannibalization (multiple pages targeting same keyword)
Content Quality Score
Rate each piece on:
- Accuracy and freshness (1-10)
- Comprehensiveness (1-10)
- Readability (1-10)
- Engagement metrics (1-10)
- SEO optimization (1-10)
Content Gaps
Find opportunities:
- Keywords competitors rank for that you don’t
- Questions your audience asks
- Topics your competitors cover that you don’t
- New trends in your industry
- Seasonal content opportunities
Thin Content
Identify and fix:
- Pages with <300 words
- Duplicate or near-duplicate content
- Auto-generated content
- Scraped content
- Doorway pages
- Pages with no unique value
Solutions:
- Expand with valuable content
- Consolidate similar pages
- Noindex or delete
- 301 redirect to better pages
User Experience Audit
Navigation
Checklist:
- [ ] Clear main navigation
- [ ] Logical menu structure
- [ ] Important pages easily accessible
- [ ] Breadcrumbs on deep pages
- [ ] Search functionality
- [ ] Mobile-friendly menu
Site Search
If you have site search:
- [ ] Returns relevant results
- [ ] Handles misspellings
- [ ] Shows results count
- [ ] Filters/refinement options
- [ ] Analytics tracking
Engagement Metrics
Analyze in GA4:
- Bounce rate (high may indicate UX issues)
- Time on page
- Pages per session
- Scroll depth
- Click tracking on CTAs
Red flags:
- Very high bounce rates (>80%)
- Very short time on page (<30 seconds for content)
- Low pages per session (<2)
- High exit rates on key pages
Conversion Elements
For conversion pages:
- [ ] Clear value proposition
- [ ] Prominent CTA
- [ ] Trust signals (reviews, testimonials, badges)
- [ ] Contact information visible
- [ ] Forms optimized (minimal fields)
- [ ] No distractions
Backlink Profile Audit
Backlink Metrics
Overall health:
- Total backlinks
- Referring domains
- Domain Authority/Rating
- Link growth over time
- Link velocity
Use Ahrefs, SEMrush, or Moz to analyze.
Link Quality Assessment
Evaluate each linking domain:
- Domain authority/rating
- Relevance to your industry
- Traffic to site
- Spam score
- Link placement (contextual vs. sidebar/footer)
Toxic Links
Identify problematic links:
- Spammy domains
- Irrelevant sites
- Link farms
- PBNs (Private Blog Networks)
- Unnatural anchor text patterns
- Site-wide links from low-quality sites
Action:
- Attempt removal (contact webmaster)
- Disavow file for toxic links that can’t be removed
Anchor Text Analysis
Review anchor text distribution:
- Branded (company name) – should be majority
- Naked URLs (yoursite.com)
- Generic (“click here”, “website”)
- Partial match (brand + keyword)
- Exact match (exact keyword) – should be minority
Red flag: High percentage of exact match anchors can indicate manipulation.
Lost Links
Monitor for:
- Recently lost backlinks
- Broken backlinks (404 on your site)
- Links that changed to competitors
Recover:
- Fix broken pages that had backlinks
- Reach out to restore valuable lost links
- Create 301 redirects from broken URLs with backlinks
Link Building Opportunities
Find opportunities:
- Competitor backlinks you don’t have
- Broken links on other sites (broken link building)
- Unlinked brand mentions
- Guest posting opportunities
- Resource pages in your industry
Competitive Analysis
Identify Top Competitors
In Google Search Console:
- See which sites compete for your queries
In SEO tools:
- Enter your domain
- View organic competitors
- Identify top 5-10 competitors
Competitor Comparison
Analyze:
- Keywords they rank for that you don’t
- Their content strategy
- Their backlink sources
- Their site structure
- Their technical SEO
- Their content frequency
Gap Analysis
Find opportunities where competitors are winning:
- Keywords with high volume they rank for
- Content types they produce
- Backlink sources they have
- Features they offer
- Technical advantages
Local SEO Audit
Google Business Profile
Checklist:
- [ ] Claimed and verified
- [ ] Complete business information
- [ ] Correct category
- [ ] Service areas defined
- [ ] Hours accurate
- [ ] Photos uploaded
- [ ] Posts published regularly
- [ ] Reviews managed and responded to
NAP Consistency
Name, Address, Phone must be identical across:
- Your website
- Google Business Profile
- Bing Places
- Yelp
- Industry directories
- Citations
Check for:
- Different phone numbers
- Variations in business name
- Old addresses
- Suite/unit number inconsistencies
Local Citations
Audit citations on:
- Major platforms (Google, Bing, Apple, Yelp)
- Local directories
- Industry-specific directories
- News sites and blogs
Check for:
- Missing citations
- Incorrect information
- Duplicate listings
- Inconsistencies
Local Content
On-page local signals:
- [ ] City/region in title tags
- [ ] Local keywords in content
- [ ] Location pages for multi-location
- [ ] Local schema markup
- [ ] Embedded Google Map
- [ ] Address in footer
International/Multi-Language SEO
Hreflang Implementation
If targeting multiple countries/languages:
- [ ] Hreflang tags implemented
- [ ] Correct country/language codes
- [ ] Self-referencing tags
- [ ] Reciprocal tags
- [ ] X-default tag for unmatched users
- [ ] No errors in Search Console
URL Structure
Choose one approach:
- ccTLDs (yoursite.de, yoursite.fr)
- Subdirectories (yoursite.com/de/, yoursite.com/fr/)
- Subdomains (de.yoursite.com, fr.yoursite.com)
Ensure:
- Consistent structure
- Proper redirects by location
- Content fully translated (not auto-translated)
- Local hosting or CDN
Prioritizing Audit Findings
Impact vs. Effort Matrix
Quick wins (High impact, low effort):
- Fix missing/duplicate title tags and meta descriptions
- Add alt text to images
- Fix broken links
- Improve page speed (low-hanging fruit)
Major projects (High impact, high effort):
- Site restructure
- Content overhaul
- Technical infrastructure improvements
- Comprehensive backlink building
Fill ins (Low impact, low effort):
- Minor content updates
- Schema markup additions
- Internal link optimization
Low priority (Low impact, high effort):
- Defer or skip unless required
Creating Action Plan
Template:
| Issue | Impact | Effort | Priority | Owner | Deadline |
|---|---|---|---|---|---|
| Missing meta descriptions on 50 pages | Medium | Low | High | Marketing | Week 1 |
| Slow page speed (LCP 4s) | High | Medium | High | Dev | Week 2 |
| Thin content on 20 pages | Medium | High | Medium | Content | Month 1 |
SEO Audit Automation with n8n
Automated Crawl Monitor
{
"name": "Weekly SEO Health Check",
"nodes": [
{
"parameters": {
"rule": {"interval": [{"field": "weeks", "weeksInterval": 1}]}
},
"name": "Weekly Trigger",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [250, 300]
},
{
"parameters": {
"method": "GET",
"url": "https://www.googleapis.com/pagespeedonline/v5/runPagespeed",
"sendQuery": true,
"queryParameters": {
"parameters": [
{"name": "url", "value": "https://yoursite.com"},
{"name": "category", "value": "performance"},
{"name": "category", "value": "seo"},
{"name": "strategy", "value": "mobile"}
]
}
},
"name": "PageSpeed Insights",
"type": "n8n-nodes-base.httpRequest",
"position": [450, 300]
},
{
"parameters": {
"jsCode": "const data = $input.first().json;\nconst lighthouse = data.lighthouseResult;\n\nconst scores = {\n performance: Math.round(lighthouse.categories.performance.score * 100),\n seo: Math.round(lighthouse.categories.seo.score * 100),\n lcp: lighthouse.audits['largest-contentful-paint'].displayValue,\n cls: lighthouse.audits['cumulative-layout-shift'].displayValue,\n fid: lighthouse.audits['max-potential-fid'].displayValue\n};\n\nconst issues = [];\nif (scores.performance < 50) issues.push('⚠️ Poor performance score');\nif (scores.seo < 90) issues.push('⚠️ SEO score below 90');\nif (parseFloat(scores.lcp) > 2.5) issues.push('⚠️ LCP above 2.5s');\n\nreturn [{\n json: {\n ...scores,\n issues,\n url: 'https://yoursite.com',\n date: new Date().toISOString()\n }\n}];"
},
"name": "Process Results",
"type": "n8n-nodes-base.code",
"position": [650, 300]
},
{
"parameters": {
"conditions": {
"number": [
{
"value1": "={{ $json.issues.length }}",
"operation": "larger",
"value2": 0
}
]
}
},
"name": "Any Issues?",
"type": "n8n-nodes-base.if",
"position": [850, 300]
},
{
"parameters": {
"channel": "#seo-alerts",
"text": "🔍 *SEO Health Check Alert*\n\n*Scores:*\n• Performance: {{ $json.performance }}/100\n• SEO: {{ $json.seo }}/100\n\n*Core Web Vitals:*\n• LCP: {{ $json.lcp }}\n• CLS: {{ $json.cls }}\n• FID: {{ $json.fid }}\n\n*Issues:*\n{{ $json.issues.join('\\n') }}"
},
"name": "Alert Team",
"type": "n8n-nodes-base.slack",
"position": [1050, 200]
},
{
"parameters": {
"operation": "append",
"sheetId": "YOUR_SHEET_ID",
"sheetName": "SEO Metrics",
"columns": {
"mappingMode": "defineBelow",
"value": {
"date": "={{ $json.date }}",
"performance": "={{ $json.performance }}",
"seo": "={{ $json.seo }}",
"lcp": "={{ $json.lcp }}",
"cls": "={{ $json.cls }}"
}
}
},
"name": "Log Metrics",
"type": "n8n-nodes-base.googleSheets",
"position": [1050, 400]
}
]
}
Broken Link Monitor
{
"name": "Broken Link Checker",
"nodes": [
{
"parameters": {
"rule": {"interval": [{"field": "days", "daysInterval": 7}]}
},
"name": "Weekly Check",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [250, 300]
},
{
"parameters": {
"method": "GET",
"url": "https://api.apify.com/v2/acts/apify~broken-link-checker/runs/last/dataset/items",
"authentication": "genericCredentialType",
"genericAuthType": "httpQueryAuth",
"queryParameters": {
"parameters": [
{"name": "token", "value": "YOUR_APIFY_TOKEN"}
]
}
},
"name": "Get Broken Links",
"type": "n8n-nodes-base.httpRequest",
"position": [450, 300]
},
{
"parameters": {
"jsCode": "const links = $input.all();\n\nconst broken = links.filter(l => {\n return l.json.statusCode >= 400 || l.json.statusCode === 0;\n});\n\nconst grouped = broken.reduce((acc, link) => {\n const page = link.json.referrer || 'Unknown';\n if (!acc[page]) acc[page] = [];\n acc[page].push({\n url: link.json.url,\n status: link.json.statusCode\n });\n return acc;\n}, {});\n\nreturn [{\n json: {\n totalBroken: broken.length,\n brokenByPage: grouped,\n date: new Date().toISOString()\n }\n}];"
},
"name": "Process Broken Links",
"type": "n8n-nodes-base.code",
"position": [650, 300]
},
{
"parameters": {
"conditions": {
"number": [
{
"value1": "={{ $json.totalBroken }}",
"operation": "larger",
"value2": 0
}
]
}
},
"name": "Any Broken Links?",
"type": "n8n-nodes-base.if",
"position": [850, 300]
},
{
"parameters": {
"fromEmail": "seo@yoursite.com",
"toEmail": "team@yoursite.com",
"subject": "⚠️ Broken Links Found on Website",
"emailType": "html",
"html": "<h2>Broken Link Report</h2><p><strong>Total broken links found: {{ $json.totalBroken }}</strong></p>{{ Object.entries($json.brokenByPage).map(([page, links]) => `<h3>${page}</h3><ul>${links.map(l => `<li>${l.url} (${l.status})</li>`).join('')}</ul>`).join('') }}"
},
"name": "Email Report",
"type": "n8n-nodes-base.gmail",
"position": [1050, 200]
}
]
}
Post-Audit Monitoring
Set Up Tracking
Weekly monitoring:
- Core Web Vitals
- Index coverage
- Search Console errors
- Ranking changes
Monthly monitoring:
- Organic traffic trends
- Keyword rankings
- Backlink profile
- Competitor movements
Quarterly full audits:
- Complete technical audit
- Content audit
- Backlink audit
- Competitive analysis
Conclusion: Continuous Improvement
An SEO audit isn’t a one-time event—it’s the first step in continuous improvement. The audit identifies issues; the real work is fixing them and monitoring results.
Start with quick wins for immediate impact. Tackle major projects systematically. Monitor progress and re-audit regularly.
SEO is never “done.” Algorithms change, competitors improve, and websites evolve. Regular audits keep you ahead of problems and positioned for growth.
Use this checklist as your roadmap. Work through it systematically. Fix what’s broken, optimize what’s working, and watch your organic traffic grow.
Need help with your SEO audit? At marketingadvice.ai, we perform comprehensive SEO audits that identify issues and create prioritized action plans. From technical fixes to content strategy, we help you rank higher. Get a free SEO audit.
Visit: marketingadvice.ai
