git clone https://github.com/openclaw/skills
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/1kalin/afrexai-technical-seo" ~/.claude/skills/clawdbot-skills-afrexai-technical-seo && rm -rf "$T"
skills/1kalin/afrexai-technical-seo/SKILL.mdTechnical SEO Mastery
Complete technical SEO audit, fix, and monitoring system. From crawlability to Core Web Vitals to international SEO — everything search engines need to find, crawl, index, and rank your site.
When to Use
- "Technical SEO audit for my site"
- "Why isn't Google indexing my pages?"
- "Fix Core Web Vitals issues"
- "Pre-migration SEO checklist"
- "My site is slow / rankings dropped"
- "Check robots.txt / sitemap / schema markup"
- "International SEO / hreflang setup"
Phase 1: Quick Health Check (5-Minute Triage)
Before a full audit, run a rapid assessment. Fetch the site and check:
quick_health: url: "[domain]" checks: robots_txt: "[accessible / blocked / missing]" sitemap_xml: "[found / missing / errors]" https: "[yes / mixed content / no]" mobile_viewport: "[set / missing]" page_load: "[fast <2s / moderate 2-4s / slow >4s]" h1_present: "[yes / missing / multiple]" canonical: "[set / missing / self-referencing]" structured_data: "[present / missing / errors]" severity: "[healthy / needs work / critical]" priority_fix: "[top issue to address first]"
Severity guide:
- 🟢 Healthy: 0-1 issues — minor optimizations only
- 🟡 Needs work: 2-4 issues — schedule fixes this week
- 🔴 Critical: 5+ issues or any blocking issue — fix immediately
Phase 2: Crawlability Audit
2.1 Robots.txt Analysis
Fetch
[domain]/robots.txt and evaluate:
robots_txt_audit: exists: true/false valid_syntax: true/false issues: - type: "[blocked_important_page / missing_sitemap / wildcard_block / syntax_error]" detail: "[specific line or pattern]" severity: "critical/warning/info" fix: "[exact fix]" checks: - "Sitemap directive present" - "No accidental blocking of CSS/JS/images" - "No blocking of important page directories" - "Correct user-agent targeting (Googlebot, Bingbot, etc.)" - "No conflicting rules (allow + disallow same path)" - "Crawl-delay only if needed (slows indexing)"
Common mistakes:
| Mistake | Impact | Fix |
|---|---|---|
blocking everything | No pages indexed | Remove or narrow scope |
| Blocking CSS/JS | Poor rendering = ranking drop | |
| No sitemap reference | Slower discovery | Add directive |
| Multiple sitemaps not declared | Partial crawling | Declare all sitemaps |
| Blocking search/filter pages poorly | Crawl waste | Use patterns |
Recommended template:
User-agent: * Allow: / Disallow: /admin/ Disallow: /api/ Disallow: /checkout/ Disallow: /*?sort= Disallow: /*?filter= Sitemap: https://example.com/sitemap.xml Sitemap: https://example.com/sitemap-images.xml
2.2 XML Sitemap Audit
Fetch sitemap(s) and evaluate:
sitemap_audit: url: "[sitemap URL]" type: "[index / single / none]" url_count: 0 issues: - type: "[missing / too_large / includes_noindex / stale_lastmod / broken_urls]" severity: "critical/warning/info" fix: "[specific action]" quality_checks: - "All URLs return 200 (no 404s, 301s, or 5xx)" - "No noindex pages included" - "lastmod dates are accurate (not all same date)" - "Under 50,000 URLs per sitemap file" - "Under 50MB uncompressed per file" - "Sitemap index if >50K URLs" - "Matches canonical URLs (not alternate versions)" - "Images/video sitemaps if applicable"
Sitemap best practices:
- One URL per
entry — canonical version only<url>
should reflect actual content change datelastmod- Priority and changefreq are largely ignored by Google — optional
- Compress with gzip for large sitemaps
- Submit in Google Search Console AND robots.txt
2.3 Crawl Budget Optimization
crawl_budget_analysis: total_pages: 0 indexable_pages: 0 crawl_waste_ratio: "[indexable / total — target >80%]" waste_sources: - source: "[faceted navigation / pagination / parameters / duplicate content / thin pages]" page_count: 0 action: "[noindex / canonical / robots block / parameter handling / consolidate]" optimization_priority: 1: "Remove/noindex thin and duplicate pages" 2: "Consolidate parameter variations with canonicals" 3: "Implement pagination best practices (rel=next or load-more)" 4: "Fix redirect chains (max 1 hop)" 5: "Eliminate orphan pages or link them into site structure"
Crawl budget matters when: Site has >10K pages OR crawl rate is notably low in Search Console.
Phase 3: Indexability Audit
3.1 Index Status Check
For each important page type, verify:
indexability_check: page_type: "[homepage / product / blog / category / landing]" sample_url: "[URL]" signals: meta_robots: "[index,follow / noindex / nofollow / none]" x_robots_tag: "[present / absent — check HTTP headers]" canonical: "[self / points to other URL / missing]" http_status: "[200 / 301 / 302 / 404 / 410 / 5xx]" in_sitemap: true/false internal_links_to: "[count of internal links pointing here]" robots_txt_allowed: true/false verdict: "[indexable / blocked / conflicting signals]" fix: "[action if not indexable]"
3.2 Common Indexing Blockers
| Blocker | Detection | Fix | Priority |
|---|---|---|---|
meta tag | Check | Remove tag or move to correct pages | P0 |
header | Check HTTP response headers | Remove header from server config | P0 |
| Canonical pointing elsewhere | Check | Fix to self-reference or correct target | P0 |
| Blocked in robots.txt | Cross-reference robots.txt | Update robots.txt rules | P0 |
| Not in sitemap | Check sitemap inclusion | Add to sitemap | P1 |
| No internal links (orphan) | Crawl internal link graph | Add contextual internal links | P1 |
| Soft 404 (200 with no content) | Check page content | Return proper 404 or add content | P1 |
| Duplicate content | Compare page similarity | Canonical or consolidate | P2 |
| Thin content (<200 words, no value) | Word count + quality check | Expand or merge with related page | P2 |
3.3 Redirect Audit
redirect_audit: chains_found: 0 # A→B→C (should be A→C) loops_found: 0 # A→B→A (broken) temporary_redirects: 0 # 302s that should be 301s rules: - "Max 1 redirect hop (no chains)" - "Use 301 for permanent moves, 308 for POST-preserving" - "302 only for genuinely temporary redirects" - "Update internal links to point to final destination" - "Redirect HTTP → HTTPS at server level" - "Redirect www ↔ non-www consistently"
Phase 4: Core Web Vitals & Performance
4.1 Core Web Vitals Targets
| Metric | Good | Needs Improvement | Poor |
|---|---|---|---|
| LCP (Largest Contentful Paint) | ≤2.5s | 2.5-4.0s | >4.0s |
| INP (Interaction to Next Paint) | ≤200ms | 200-500ms | >500ms |
| CLS (Cumulative Layout Shift) | ≤0.1 | 0.1-0.25 | >0.25 |
4.2 LCP Fix Playbook
lcp_diagnosis: current_lcp: "[Xs]" lcp_element: "[identify the largest element — usually hero image or heading]" fix_priority: 1: issue: "Slow server response (TTFB >800ms)" fixes: - "Enable server-side caching (Redis, Varnish)" - "Use CDN for static assets" - "Optimize database queries" - "Upgrade hosting if shared" 2: issue: "Render-blocking resources" fixes: - "Defer non-critical CSS: `<link rel='preload' as='style'>`" - "Async/defer JavaScript: `<script defer>`" - "Inline critical CSS (above-the-fold)" - "Remove unused CSS/JS" 3: issue: "Slow resource load (images, fonts)" fixes: - "Preload LCP image: `<link rel='preload' as='image' href='...'>`" - "Use WebP/AVIF format (30-50% smaller)" - "Responsive images with srcset" - "Font-display: swap for web fonts" - "Preconnect to CDN: `<link rel='preconnect' href='...'>`" 4: issue: "Client-side rendering delay" fixes: - "Server-side render (SSR) or static generate (SSG) above-fold content" - "Avoid lazy-loading the LCP element" - "Reduce JavaScript execution before paint"
4.3 INP Fix Playbook
inp_diagnosis: current_inp: "[Xms]" fix_priority: 1: "Break long tasks (>50ms) into smaller chunks using `requestIdleCallback` or `setTimeout`" 2: "Reduce main thread JavaScript — defer non-essential scripts" 3: "Use `content-visibility: auto` for off-screen content" 4: "Debounce/throttle event handlers (scroll, resize, input)" 5: "Move heavy computation to Web Workers" 6: "Optimize event delegation — avoid attaching listeners to every element" 7: "Reduce DOM size (target <1,500 elements)"
4.4 CLS Fix Playbook
cls_diagnosis: current_cls: "[X.XX]" common_causes: - cause: "Images without dimensions" fix: "Always set width/height attributes OR use aspect-ratio CSS" - cause: "Ads/embeds without reserved space" fix: "Use min-height on ad containers" - cause: "Web fonts causing FOIT/FOUT" fix: "`font-display: swap` + `<link rel='preload' as='font'>`" - cause: "Dynamically injected content above viewport" fix: "Reserve space or inject below the fold" - cause: "Late-loading CSS changing layout" fix: "Inline critical CSS, load rest async"
4.5 Performance Budget
performance_budget: total_page_weight: "< 1.5MB (ideal < 1MB)" html: "< 100KB" css: "< 100KB (ideally < 50KB)" javascript: "< 300KB (compressed)" images: "< 500KB total above fold" fonts: "< 100KB (max 2 families)" third_party: "< 200KB total" requests: total: "< 50 HTTP requests" third_party: "< 10 external domains" timing: ttfb: "< 800ms" fcp: "< 1.8s" lcp: "< 2.5s" tti: "< 3.8s"
Phase 5: Mobile Optimization
mobile_audit: viewport_meta: "[present with correct values / missing / malformed]" # Correct: <meta name="viewport" content="width=device-width, initial-scale=1"> checklist: - check: "Viewport meta tag set correctly" pass: true/false - check: "No horizontal scroll on mobile" pass: true/false - check: "Touch targets ≥48x48px with ≥8px spacing" pass: true/false - check: "Font size ≥16px base (no zoom on iOS input)" pass: true/false - check: "No fixed-width elements wider than viewport" pass: true/false - check: "Images responsive (max-width: 100%)" pass: true/false - check: "No intrusive interstitials / popups" pass: true/false - check: "Readable without zooming" pass: true/false - check: "Mobile page speed < 3s on 4G" pass: true/false - check: "No Flash or unsupported plugins" pass: true/false mobile_score: "[X/10]"
Phase 6: HTTPS & Security
security_audit: https: enabled: true/false certificate_valid: true/false certificate_expiry: "[date]" mixed_content: "[none / warnings / errors]" http_to_https_redirect: "[301 / 302 / none]" hsts_header: "[present with max-age / missing]" security_headers: - header: "Strict-Transport-Security" present: true/false recommended: "max-age=31536000; includeSubDomains; preload" - header: "Content-Security-Policy" present: true/false recommended: "[appropriate policy for site]" - header: "X-Content-Type-Options" present: true/false recommended: "nosniff" - header: "X-Frame-Options" present: true/false recommended: "SAMEORIGIN" - header: "Referrer-Policy" present: true/false recommended: "strict-origin-when-cross-origin" - header: "Permissions-Policy" present: true/false recommended: "camera=(), microphone=(), geolocation=()" security_score: "[X/10]"
HTTPS migration checklist (if not yet on HTTPS):
- Obtain SSL certificate (Let's Encrypt = free)
- Install on server / CDN
- Update all internal links to HTTPS
- 301 redirect all HTTP URLs to HTTPS
- Update canonical tags to HTTPS
- Update sitemap URLs to HTTPS
- Update Google Search Console property
- Update robots.txt Sitemap directive
- Check for mixed content (HTTP resources on HTTPS pages)
- Enable HSTS header after confirming everything works
Phase 7: Structured Data / Schema Markup
7.1 Schema Audit
schema_audit: implementation_method: "[JSON-LD / Microdata / RDFa]" # JSON-LD recommended pages_with_schema: "[X / total pages]" schemas_found: - type: "[Organization / LocalBusiness / Product / Article / FAQ / etc.]" url: "[sample URL]" valid: true/false errors: ["[list of validation errors]"] warnings: ["[list of warnings]"] missing_opportunities: - page_type: "[product / article / recipe / event / FAQ / how-to / local]" recommended_schema: "[schema type]" rich_result_eligible: "[yes — which type]" priority: "high/medium/low"
7.2 Schema Templates (JSON-LD)
Organization:
{ "@context": "https://schema.org", "@type": "Organization", "name": "[Company Name]", "url": "https://example.com", "logo": "https://example.com/logo.png", "sameAs": [ "https://twitter.com/example", "https://linkedin.com/company/example" ], "contactPoint": { "@type": "ContactPoint", "telephone": "+1-XXX-XXX-XXXX", "contactType": "customer service" } }
Article:
{ "@context": "https://schema.org", "@type": "Article", "headline": "[Title]", "author": {"@type": "Person", "name": "[Author]"}, "datePublished": "2026-01-15", "dateModified": "2026-02-18", "image": "https://example.com/image.jpg", "publisher": { "@type": "Organization", "name": "[Publisher]", "logo": {"@type": "ImageObject", "url": "https://example.com/logo.png"} } }
Product:
{ "@context": "https://schema.org", "@type": "Product", "name": "[Product Name]", "image": "https://example.com/product.jpg", "description": "[Description]", "brand": {"@type": "Brand", "name": "[Brand]"}, "offers": { "@type": "Offer", "price": "29.99", "priceCurrency": "USD", "availability": "https://schema.org/InStock", "url": "https://example.com/product" }, "aggregateRating": { "@type": "AggregateRating", "ratingValue": "4.5", "reviewCount": "127" } }
FAQ:
{ "@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [ { "@type": "Question", "name": "[Question 1]", "acceptedAnswer": {"@type": "Answer", "text": "[Answer 1]"} } ] }
Rich result eligibility by schema type:
| Schema | Rich Result | Impact |
|---|---|---|
| Product | Price, rating stars, availability | High CTR boost |
| FAQ | Expandable questions in SERP | More SERP real estate |
| HowTo | Step-by-step in SERP | Featured snippet potential |
| Article | Author, date, image | News/Discover eligibility |
| LocalBusiness | Knowledge panel, maps | Local pack ranking |
| Event | Date, location, ticket info | Event carousel |
| Recipe | Cook time, rating, calories | Recipe carousel |
| Video | Thumbnail, duration | Video carousel |
| BreadcrumbList | Breadcrumb trail in SERP | Better navigation display |
| Review | Star rating | Trust + CTR |
Phase 8: URL Structure & Architecture
url_audit: structure_pattern: "[clean / parameter-heavy / mixed]" checklist: - rule: "Lowercase only (no mixed case)" pass: true/false - rule: "Hyphens as separators (not underscores)" pass: true/false - rule: "No special characters or spaces" pass: true/false - rule: "Descriptive and keyword-rich" pass: true/false - rule: "Short (< 75 characters ideal)" pass: true/false - rule: "Logical hierarchy (/category/subcategory/page)" pass: true/false - rule: "No session IDs or tracking parameters in indexed URLs" pass: true/false - rule: "Trailing slash consistent (pick one, redirect the other)" pass: true/false - rule: "No .html/.php extensions (clean URLs)" pass: true/false # Bad: /p?id=12345&cat=3&ref=home # Good: /shoes/running/nike-air-max internal_linking: orphan_pages: 0 # Pages with 0 internal links deep_pages: 0 # Pages >4 clicks from homepage broken_links: 0 # Internal 404s fix_priority: 1: "Fix all broken internal links (404s)" 2: "Link orphan pages from relevant content" 3: "Flatten deep pages — add to navigation or hub pages" 4: "Add contextual cross-links between related content"
Site architecture best practices:
- Flat structure: every page reachable within 3 clicks from homepage
- Hub & spoke: category pages link to all children; children link back
- Breadcrumbs: implement on every page (with BreadcrumbList schema)
- Pagination: use
/rel="next"
or infinite scroll with progressive enhancementrel="prev" - Faceted navigation: canonicalize or noindex filter combinations
Phase 9: International SEO
9.1 Hreflang Implementation
international_seo: approach: "[subdirectories /en/ / subdomains en. / ccTLDs .co.uk]" # Recommended: subdirectories (easiest to manage, inherits domain authority) hreflang_audit: implemented: true/false method: "[HTML link tags / HTTP headers / sitemap]" issues: - "Missing return links (A→B exists but B→A missing)" - "Wrong language/region codes" - "Missing x-default tag" - "Self-referencing hreflang missing"
Hreflang template:
<link rel="alternate" hreflang="en-us" href="https://example.com/en-us/page" /> <link rel="alternate" hreflang="en-gb" href="https://example.com/en-gb/page" /> <link rel="alternate" hreflang="es" href="https://example.com/es/page" /> <link rel="alternate" hreflang="x-default" href="https://example.com/page" />
Rules:
- Every page must reference ALL language versions including itself
- Always include
(fallback for unmatched languages)x-default - Use ISO 639-1 for language, ISO 3166-1 Alpha 2 for region
- Hreflang must be bidirectional (if A references B, B must reference A)
- Canonical and hreflang should align — canonical should point to same-language version
9.2 International Targeting Checklist
- Correct hreflang on all pages (bidirectional)
-
specifiedx-default - Content genuinely translated (not just auto-translated)
- Local currency, date format, phone numbers
- Geo-targeting set in Search Console (for ccTLDs/subdirectories)
- Local server / CDN node in target country
- Local backlinks from target region
- Language-specific sitemap or sitemap section
Phase 10: Site Migration SEO Checklist
Use when changing domains, restructuring URLs, or redesigning:
migration_checklist: pre_migration: - "Crawl current site — full URL inventory" - "Export all current rankings and traffic data" - "Map every old URL to new URL (1:1 redirect map)" - "Backup robots.txt, sitemaps, .htaccess" - "Document all existing 301 redirects" - "Note top 100 pages by traffic — verify redirects" - "Test staging site (is it blocked from indexing?)" - "Verify new site has all schema markup" - "Check canonical tags on new site" - "Prepare new sitemap" migration_day: - "Implement all 301 redirects" - "Update robots.txt (unblock new site)" - "Submit new sitemap to Search Console" - "Update Google Search Console property if domain changed" - "Verify HTTPS redirect chain is clean" - "Test 50 random old URLs — confirm redirects work" - "Check for redirect chains or loops" - "Monitor server errors / 5xx in real-time" post_migration: week_1: - "Monitor Search Console for crawl errors daily" - "Check index coverage report" - "Verify organic traffic hasn't cratered" - "Fix any 404s appearing in crawl reports" month_1: - "Compare rankings: pre vs post migration" - "Check all structured data still validates" - "Verify internal links updated (no redirect-through links)" - "Monitor Core Web Vitals on new infrastructure" month_3: - "Full ranking comparison" - "Traffic recovery assessment (expect 80-100% recovery)" - "Clean up any remaining redirect chains" expected_traffic_impact: best_case: "2-4 weeks dip, full recovery" typical: "1-3 months for full recovery" worst_case: "6+ months if redirects missed — audit immediately"
Phase 11: Technical SEO Scoring System
Overall Technical Health Score (0-100)
scoring: crawlability: # Weight: 20% robots_txt: "/5" sitemap: "/5" crawl_budget: "/5" internal_linking: "/5" indexability: # Weight: 20% meta_robots: "/5" canonicals: "/5" redirects: "/5" duplicate_content: "/5" performance: # Weight: 25% lcp: "/5" inp: "/5" cls: "/5" ttfb: "/5" page_weight: "/5" mobile: # Weight: 10% viewport: "/5" touch_targets: "/5" responsive: "/5" speed: "/5" security: # Weight: 10% https: "/5" headers: "/5" certificate: "/5" mixed_content: "/5" structured_data: # Weight: 10% implementation: "/5" validation: "/5" coverage: "/5" rich_results: "/5" url_architecture: # Weight: 5% structure: "/5" depth: "/5" broken_links: "/5" total: "/100" grade: "[A (90+) / B (75-89) / C (60-74) / D (40-59) / F (<40)]"
Priority Fix Matrix
After scoring, generate a prioritized action plan:
action_plan: p0_critical: # Fix this week — directly blocking ranking - issue: "[description]" impact: "high" effort: "[low/medium/high]" fix: "[specific steps]" p1_important: # Fix this month — significant ranking impact - issue: "[description]" impact: "medium-high" effort: "[low/medium/high]" fix: "[specific steps]" p2_optimization: # Fix this quarter — incremental improvement - issue: "[description]" impact: "medium" effort: "[low/medium/high]" fix: "[specific steps]" p3_nice_to_have: # Backlog — minimal direct ranking impact - issue: "[description]" fix: "[specific steps]"
Priority rules:
- Anything blocking indexing = P0 always
- Core Web Vitals failing = P1 minimum
- Security issues = P0 if no HTTPS, P1 for headers
- Schema missing = P2 unless competitor has rich results (then P1)
- URL structure issues = P2 unless causing duplicate content
Phase 12: Ongoing Monitoring
Weekly Technical SEO Checklist
weekly_check: search_console: - "Index coverage: any new errors?" - "Core Web Vitals: any regressions?" - "Manual actions: any penalties?" - "Security issues: any warnings?" site_health: - "Spot-check 5 random pages load correctly" - "Check for new 404 errors" - "Verify sitemap is current and accessible" - "Monitor HTTPS certificate expiry" tracking: - "Organic traffic trend (vs. last week, vs. last year)" - "Crawl stats in Search Console" - "Any new structured data errors"
Monthly Deep Dive
monthly_review: - "Full crawl of site — compare page count to last month" - "Core Web Vitals lab + field data comparison" - "New broken links check" - "Redirect chain audit" - "Schema markup validation" - "Competitor technical comparison (1 competitor)" - "Update sitemap if new pages added" - "Review Search Console performance for anomalies"
Phase 13: Advanced Technical SEO
13.1 JavaScript SEO
javascript_seo: rendering: "[CSR / SSR / SSG / ISR / hybrid]" checklist: - "Critical content visible in initial HTML (view-source test)" - "Googlebot can render JS — check with URL Inspection tool" - "No content behind user interaction (click to load)" - "Internal links are `<a href>` tags (not JS click handlers)" - "Lazy-loaded content uses Intersection Observer (not scroll events)" - "Dynamic rendering for critical pages if needed" - "Meta tags in initial HTML (not injected by JS)" - "Canonical tags in initial HTML" framework_specific: nextjs: "Use SSG/ISR for content pages, SSR for dynamic" react_spa: "Consider prerender.io or dynamic rendering" angular: "Angular Universal for SSR" vue: "Nuxt.js for SSR/SSG"
13.2 Log File Analysis
log_analysis: what_to_look_for: - "Googlebot crawl frequency and pattern" - "Pages crawled vs not crawled" - "Crawl of non-canonical or low-value pages (waste)" - "Server errors returned to Googlebot" - "Response time for bot requests vs users" - "Bot crawl of resources (CSS/JS/images)" healthy_signals: - "Googlebot visits important pages frequently" - "New content crawled within 24-48h" - "Low error rate (<1% of requests)" - "Response time <500ms for bot requests" warning_signals: - "Googlebot stuck on parameter URLs" - "High 5xx error rate for bot" - "Important pages not crawled in 30+ days" - "Crawl rate declining over time"
13.3 Edge SEO (CDN-Level Optimizations)
| Optimization | Implementation | Impact |
|---|---|---|
| Inject hreflang at edge | Cloudflare Workers / Lambda@Edge | Faster international SEO |
| Add schema markup | Edge injection for legacy CMS | Schema without code changes |
| Redirect management | CDN rules | Faster redirects, less server load |
| A/B test SEO changes | Edge-based split testing | Test title tags, meta descriptions |
| Pre-render for bots | Detect UA, serve cached HTML | Fix JS rendering issues |
Phase 14: Common Technical SEO Mistakes
| # | Mistake | Why It Matters | Fix |
|---|---|---|---|
| 1 | Blocking staging site from indexing, forgetting to unblock at launch | Zero pages indexed | Check robots.txt + meta robots at launch |
| 2 | Using 302 instead of 301 for permanent redirects | Link equity not passed | Switch to 301 |
| 3 | Multiple versions of homepage indexed (www/non-www, HTTP/HTTPS, trailing slash) | Diluted authority | Pick one canonical, redirect all others |
| 4 | Orphan pages with no internal links | Never found by crawlers | Add to navigation or contextual links |
| 5 | Sitemap includes noindex pages | Conflicting signals | Filter sitemap to indexable pages only |
| 6 | Missing alt text on images | Accessibility + image SEO loss | Add descriptive alt text to all images |
| 7 | Not monitoring Core Web Vitals after deploy | Performance regressions | Set up CrUX monitoring + alerts |
| 8 | Redirect chains (A→B→C→D) | Slow + link equity loss | Flatten to single hop |
| 9 | Large unoptimized images | Slow LCP, page weight | WebP/AVIF + responsive srcset |
| 10 | No HTTPS or mixed content | Trust signal lost, browser warnings | Full HTTPS migration |
Edge Cases
E-commerce (1000s of product pages)
- Faceted navigation: canonical to base category, noindex filter combos
- Out-of-stock pages: keep page, show "out of stock" (don't 404)
- Pagination: use
to collection page or implement load-morerel=canonical
Single Page Applications (SPAs)
- Pre-rendering or SSR is mandatory for SEO
- Check that
tags exist in HTML (not just JS routing)<a href> - Test with JavaScript disabled — is critical content visible?
Large sites (100K+ pages)
- Sitemap index with multiple child sitemaps
- Crawl budget optimization is critical
- Consider dynamic XML sitemaps that auto-update
- Log file analysis to understand actual crawl behavior
WordPress specific
- Install Yoast/RankMath for technical SEO basics
- Check theme isn't injecting bad schema
- Minimize plugins (each adds JS/CSS weight)
- Use object caching (Redis) + page caching (WP Super Cache/W3 Total Cache)
After a Google algorithm update
- Don't panic — wait 2 weeks for volatility to settle
- Compare affected pages vs unaffected — find the pattern
- Check Search Console for manual actions
- Focus on content quality and E-E-A-T, not just technical fixes
Natural Language Commands
"Run a technical SEO audit for [URL]" "Check Core Web Vitals for [URL]" "Audit my robots.txt and sitemap" "Find indexing issues on my site" "Check structured data / schema markup" "Generate schema markup for [page type]" "Pre-migration SEO checklist for [old] → [new]" "Check security headers for [URL]" "Find broken links and redirect chains" "International SEO audit for [URL]" "Score my site's technical SEO health" "What's causing my slow page speed?"