📋 Reference Document

SEO / GEO / Social
Master Checklist

A comprehensive, platform-agnostic audit checklist for technical SEO, on-page optimisation, Core Web Vitals, structured data, social metadata, GEO signals, and more — for any static or CMS-based website.

11 Audit Categories 90+ Checklist Items Version 1.0 · June 2025 Platform-Agnostic
Priority: Critical Fix immediately — breaks indexing, sharing, or rankings High Strong impact on performance or visibility Medium Best practice — meaningful but non-blocking Low Optional enhancement or future consideration
Total Items
0
Completed
Remaining
0%
Complete
🔧

1 · Technical Foundation

The baseline infrastructure every page must have before any other SEO work is meaningful.

12 items
Section progress0%
Meta Tags
Unique <title> on every page
50–60 characters. Primary keyword near the front. Brand name at the end, separated by a dash or pipe. Never duplicate across pages.
Critical
Unique meta description on every page
120–160 characters. Written as a compelling call to action that includes the primary keyword naturally. Never duplicate across pages.
Critical
Canonical tag (rel="canonical") on every page
Self-referencing canonical on all pages prevents duplicate content issues. Must use the absolute, HTTPS URL including trailing slash consistency.
<link rel="canonical" href="https://example.com/page/" />
Critical
Meta robots tag appropriately set
Main pages: index, follow. Legal/utility pages (privacy, terms, thank-you, admin): noindex, follow. Never accidentally noindex key pages.
Critical
Correct lang attribute on <html>
Declare lang="en" (or appropriate locale). Critical for accessibility, translation tools, and voice search.
High
Viewport meta tag present
Required for mobile-first indexing. content="width=device-width, initial-scale=1.0"
Critical
Performance Hints
Preconnect to critical third-party origins
Fonts, CDNs, analytics. Reduces connection latency for external resources that are loaded on every page. Add crossorigin for font origins.
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
High
Preload LCP resource (hero image or font)
Preload the above-the-fold image or critical web font so the browser fetches it immediately rather than discovering it during parse.
<link rel="preload" as="image" href="/hero.webp" />
High
HTTPS enforced on all pages and assets
Mixed content (HTTP assets on an HTTPS page) breaks security indicators and can suppress ranking. All sub-resources must be HTTPS.
Critical
Consistent URL structure (trailing slash or not)
Pick one convention and enforce it sitewide with redirects. Inconsistency splits link equity and creates duplicate content.
High
Non-www ↔ www redirected to canonical version
301-redirect one to the other at the server level. Both should not be accessible independently.
Critical
Charset declaration (UTF-8) as first child of <head>
Must appear before the title tag to prevent character encoding issues in older browsers and crawlers.
Medium
📝

2 · On-Page & Content SEO

Heading hierarchy, keyword placement, internal linking, and content signals that directly influence rankings.

10 items
Section progress0%
Single <h1> per page containing the primary keyword
The H1 is the strongest on-page ranking signal for its keyword. One per page only. Should match or closely mirror the title tag.
Critical
Logical heading hierarchy (H1 → H2 → H3)
Never skip heading levels. H2s define major page sections; H3s subdivide them. Headings also help screen readers and AI content parsers.
High
Primary keyword in first 100 words of body copy
Early keyword placement signals topical relevance. Do not keyword-stuff — natural integration is essential for E-E-A-T signals.
High
Internal links use descriptive anchor text
Avoid "click here" or "learn more". Anchors like "AI-assisted hair transplant procedure" pass keyword context to the linked page.
High
Minimum word count appropriate to page type
Service pages: 600–1,200+ words. Blog/articles: 1,200–2,500+ words. Thin content (<200 words) may be devalued by Google.
Medium
External links open in _blank with rel="noopener"
Security best practice. rel="noopener noreferrer" prevents the opened page from accessing your window object.
Medium
No keyword-stuffing or unnatural repetition
Exact-match keyword density over ~3% can trigger spam filters. Write for humans first — Google's NLP understands synonyms and semantic variants.
High
Page URL is short, lowercase, and keyword-rich
Use hyphens (not underscores) to separate words. Avoid dates, IDs, or stop words in URLs. /hair-transplant-beverly-hills/ beats /page?id=142.
High
Breadcrumb navigation present on deep pages
Improves user orientation and generates breadcrumb rich results in SERPs. Mark up with BreadcrumbList JSON-LD.
Medium
Content updated and "freshness" date visible where relevant
For evergreen pages, adding "Last updated: [Month Year]" signals freshness to both users and crawlers. Use dateModified in JSON-LD.
Low
🔗

3 · Open Graph (OG) Tags

Controls how your pages appear when shared on Facebook, LinkedIn, WhatsApp, Slack, and most chat apps.

10 items
Section progress0%
og:title on every page
Can differ slightly from the <title> tag — can be more descriptive or punchy since character limits are less strict in OG context. 60–90 chars recommended.
Critical
og:description on every page
2–3 sentences. Should be more conversational and compelling than the meta description. Approximately 200 characters.
Critical
og:image — 1200×630 px dedicated social card
Never use transparent PNGs or portrait images. Create a branded 1200×630 JPEG or PNG specifically for social sharing. File size under 8 MB (ideally under 1 MB).
Critical
og:image:width and og:image:height
Explicitly declaring dimensions prevents crawlers from having to download the image to discover its size. Always pair with an og:image.
<meta property="og:image:width" content="1200" />
<meta property="og:image:height" content="630" />
High
og:image:alt — descriptive text for the social image
Accessibility for screen readers viewing shared cards. Describe the actual image content, not just the brand name.
High
og:url — absolute canonical URL
Must match the canonical tag exactly (protocol, www/non-www, trailing slash). This is what platforms use to deduplicate shares.
Critical
og:type set correctly
website for most pages, article for blog posts, product for e-commerce pages. Omitting defaults to website but explicit is better.
High
og:site_name — your brand name
Shown in the card UI on some platforms (Facebook, LinkedIn) as a sub-header beneath the card. Should be consistent across all pages.
High
og:locale — e.g. en_US
Used by Facebook and AI crawlers to understand the language/region of the content. Format: language_TERRITORY. Add og:locale:alternate if serving multiple languages.
Medium
OG image URL is absolute HTTPS, not CDN-redirected
Some platforms do not follow redirects when fetching OG images. Use the final destination URL. Test with Facebook Sharing Debugger and LinkedIn Inspector.
High
🐦

4 · Twitter / X Card Tags

Controls appearance on X (Twitter) — also used by some other social platforms that don't read OG tags.

7 items
Section progress0%
twitter:card set on every page
summary_large_image for content pages (shows a large image). summary for utility/legal pages without images. Required — without it, no card renders.
Critical
twitter:title — concise and under 70 chars
X truncates titles at 70 characters in most card layouts. If not specified, falls back to og:title, but explicit values are more reliable.
High
twitter:description
Under 200 characters. Shown beneath the title in the card. Falls back to og:description if absent.
High
twitter:image — same 1200×630 social card
Can reuse the OG image. Must be under 5 MB for summary_large_image. Use an absolute HTTPS URL. Twitter fetches this on first share and caches it.
High
twitter:image:alt
Accessibility requirement for X. Should describe the image in 420 characters or less. Important for screen-reader users who encounter your shared links.
High
twitter:site — your @handle
Your brand's X handle (e.g. @YourBrand). Attribution shown in the card footer. Builds social identity association with your domain.
Medium
Validate cards with X Card Validator
After publishing, visit cards-dev.twitter.com/validator and enter your URL. Clears the cache and confirms your card renders correctly on X.
Medium
🧩

5 · Structured Data (JSON-LD)

Schema markup that powers rich results in Google Search, Bing, and AI summaries (GEO). Implement in a <script type="application/ld+json"> block.

12 items
Section progress0%
Organisation / Business
Organization or LocalBusiness schema on homepage
Declare your entity once with @id, name, url, logo, sameAs (social profiles), address, telephone. This creates your brand entity for the Knowledge Graph.
Critical
WebSite schema with SearchAction (Sitelinks Searchbox)
Enables the sitelinks searchbox in Google when users search your brand. Include potentialAction with a SearchAction pointing to your search URL.
Medium
WebPage schema on every page
At minimum: @type, @id, name, url, description, isPartOf (linking to the WebSite entity). Helps AI understand page purpose.
High
Content & Rich Results
FAQPage schema where FAQ content exists
Each Q&A pair in an acceptedAnswer/Question structure. Can generate People Also Ask expansion in SERPs and AI overview citations.
High
HowTo schema for process/step content
Use on pages with numbered steps (e.g. "How a Hair Transplant Works in 5 Steps"). Can generate HowTo rich snippets with numbered steps shown in SERPs.
High
AggregateRating schema for review pages
Display star ratings in SERPs. Requires ratingValue, ratingCount/reviewCount, and bestRating. Only mark up genuine ratings visible on page.
High
Review items in testimonials schema
Individual reviews with author, reviewBody, reviewRating. Combined with AggregateRating to substantiate the aggregate score.
Medium
Person schema for key team members
Name, jobTitle, image, url, sameAs (LinkedIn). Creates people entities that appear in Knowledge Panels and E-E-A-T signals for YMYL content.
High
BreadcrumbList schema matching visible breadcrumbs
Must match exactly what users see. Can generate breadcrumb trails in SERPs replacing the URL — improves CTR and navigation understanding.
Medium
Validation
Validate with Google Rich Results Test
Test every page with schema at search.google.com/test/rich-results. Fix all errors; review warnings. Revalidate after any structural change.
Critical
No schema misrepresentation (must match visible content)
Google's spam policies prohibit marking up content that isn't visible on the page. Fake reviews, inflated ratings, or invisible content in JSON-LD can trigger manual actions.
Critical
sameAs array includes all canonical social profiles
Link your Organization entity to Instagram, Facebook, LinkedIn, YouTube, X, Wikipedia, Crunchbase etc. Helps Google consolidate your entity across the web.
High

6 · Core Web Vitals & Page Experience

Google's user experience ranking signals: LCP, INP, CLS. Directly impact rankings since the Page Experience update.

9 items
Section progress0%
LCP — Largest Contentful Paint (target: ≤ 2.5s)
LCP element identified and not lazy-loaded
The hero image or headline is typically the LCP element. Never apply loading="lazy" to it. Use loading="eager" or no attribute (eager is default).
Critical
Hero image preloaded with rel="preload"
For above-the-fold images that are LCP candidates, add a preload link in <head> so the browser starts fetching before it reaches the img tag.
High
Critical CSS inlined or render-blocking CSS eliminated
CSS in <head> blocks rendering. Inline critical (above-fold) CSS in a <style> tag; load the rest asynchronously.
High
CLS — Cumulative Layout Shift (target: ≤ 0.1)
All <img> tags have explicit width and height attributes
Without dimensions, the browser can't reserve space before the image loads — causing layout shift. Set width/height to the intrinsic image dimensions; control display size with CSS.
<img src="photo.jpg" width="600" height="400" alt="..." />
Critical
Web fonts use font-display: swap or are preloaded
font-display: swap prevents invisible text during font load (FOIT) — shows fallback font instead. Improves both CLS and LCP perception.
High
No dynamically injected content above existing content
Banners, cookie notices, ads that push content down after page load are CLS offenders. Reserve space for these elements with CSS min-height before they load.
High
INP — Interaction to Next Paint (target: ≤ 200ms)
Long JavaScript tasks broken up (<50ms chunks)
Tasks over 50ms block the main thread and delay user interaction responses. Use requestAnimationFrame, setTimeout, or Web Workers to split heavy work.
High
Unused JavaScript deferred or removed
Third-party scripts (chat, analytics, social embeds) should load with defer or async. Audit with Lighthouse "Unused JavaScript" report.
High
PageSpeed Insights score ≥ 90 on mobile and desktop
Run pagespeed.web.dev on every key page. Focus on mobile — Google indexes mobile-first. CWV thresholds: LCP ≤2.5s, INP ≤200ms, CLS ≤0.1.
Critical
🖼️

7 · Image Optimisation

Images are typically the heaviest assets on a page. Proper optimisation reduces page weight, improves LCP, and enhances image search visibility.

8 items
Section progress0%
All images have descriptive alt text
Describes the image content (not "image of..." or filename). Include relevant keywords naturally. Decorative images use alt="". Critical for accessibility (WCAG 1.1.1) and image search.
Critical
loading="lazy" on all below-fold images
Defers loading of off-screen images until the user scrolls near them. Reduces initial page weight and improves LCP. Never apply to above-fold or LCP images.
<img src="result.jpg" loading="lazy" width="600" height="400" alt="..." />
Critical
Images served in modern formats (WebP or AVIF)
WebP is ~30% smaller than JPEG at equivalent quality. AVIF is ~50% smaller. Use <picture> with <source> for format negotiation, with JPEG fallback.
High
Images sized appropriately (never scaled down via CSS alone)
A 4000px image displayed at 400px wastes 100× bandwidth. Serve appropriately sized variants. Use srcset for responsive images across device pixel ratios.
High
Image file names are descriptive (not IMG_0032.jpg)
File names are indexed by Google Images. Use hyphenated, keyword-relevant names like hair-transplant-before-after-beverly-hills.jpg.
Medium
Image schema (image:image) in sitemap for key images
Adding <image:image> extensions to your XML sitemap helps Google discover images for Image Search, especially for e-commerce or medical before/after content.
Medium
No decorative images in <img> tags (use CSS background)
Pure decorative images (dividers, textures, patterns) should be CSS backgrounds, not <img> elements. This keeps them out of the accessibility tree and reduces DOM size.
Medium
Images compressed (max ~200KB for content images)
Run images through Squoosh, Sharp, or ImageOptim. Hero/banner images: ≤ 250KB. Gallery thumbnails: ≤ 80KB. Icons/logos: ≤ 30KB. Or use a CDN with auto-compression.
High
🕷️

8 · Crawlability & Indexing

Controls what search engines discover, crawl, index, and how they navigate your site. Errors here can make your entire site invisible.

9 items
Section progress0%
robots.txt present and correct
Located at /robots.txt. Must include Sitemap: directive. Disallow only private/utility pages (admin, staging, legal). Never accidentally disallow /.
User-agent: *
Allow: /
Disallow: /admin/
Sitemap: https://example.com/sitemap.xml
Critical
XML sitemap present and submitted to Google Search Console
Located at /sitemap.xml. Include all indexable URLs. Set <priority> and <changefreq>. Submit via Google Search Console → Sitemaps.
Critical
No accidental noindex on important pages
A common staging mistake left in production. Audit every page's meta robots tag and HTTP X-Robots-Tag header. Use Google Search Console to detect any noindexed pages.
Critical
Google Search Console verified and data flowing
Verify ownership via HTML file, DNS record, or meta tag. Monitor Index Coverage, Core Web Vitals, Manual Actions, and Search Performance reports weekly.
Critical
No broken internal links (404 errors)
Crawl your site monthly with Screaming Frog or Sitebulb. Fix all 4xx errors. Redirect moved pages with 301s — never leave link equity orphaned.
High
Pagination handled correctly (rel="next"/prev" or self-canonicalised)
For paginated content (blogs, galleries), either canonicalise all pages to page 1, or use rel="next"/prev to signal the sequence to Googlebot.
Medium
Orphaned pages have internal links pointing to them
Pages with no internal links are rarely crawled or ranked. Every indexable page should be reachable within 3 clicks from the homepage.
High
Custom 404 page with navigation links
A helpful 404 keeps users on the site. Include the main nav, a search bar, and links to key sections. Returns HTTP 404 status (not 200).
Medium
Site crawled and audited quarterly
Regular full crawls catch redirect chains, duplicate content, missing meta tags, and new broken links before they compound. Schedule quarterly at minimum.
Medium
🤖

9 · GEO — Generative Engine Optimisation

Signals that help AI systems (ChatGPT, Perplexity, Google AI Overviews, Bing Copilot) identify, cite, and feature your content accurately.

10 items
Section progress0%
Entity & E-E-A-T Signals
Named entities used consistently throughout content
AI systems extract and link named entities (people, places, products, organisations). Consistent naming — never varying "Dr Smith" / "Doctor Smith" / "Smith MD" — strengthens entity recognition.
High
Author bios with credentials on all content pages
For YMYL content (health, finance, legal), Google's E-E-A-T (Experience, Expertise, Authoritativeness, Trustworthiness) requires demonstrable expertise. Author schema with credentials is essential.
Critical
About page clearly establishes brand credibility
AI systems cite "About" pages when building entity profiles. Include: founding date, key personnel, qualifications, awards, professional memberships, physical address.
High
External citations and mentions on authoritative sites
Being mentioned by news outlets, professional bodies, Wikipedia, or industry sites creates corroborating signals that AI uses to validate claims about your entity.
High
Content Structure for AI Parsing
FAQ sections with concise, direct answers
AI Overview citations often pull from FAQ content because they answer questions directly. Write FAQ answers in 2–4 sentences that stand alone without surrounding context.
High
Statistics and claims include sources (citations)
AI models prefer citable, verifiable content. Linking to peer-reviewed studies, official statistics, or regulatory bodies significantly increases the chance of being cited in AI responses.
High
Content answers "who, what, when, where, why, how" explicitly
AI search engines reward comprehensive content that pre-answers follow-up questions. Structure pages to address the full question space around a topic, not just the primary query.
Medium
Consistent NAP (Name, Address, Phone) across all pages and directories
AI systems cross-reference business data across sources. Inconsistent NAP (e.g. different phone numbers on your site vs. Google Business Profile) undermines entity confidence.
Critical
Brand mentioned with full name on key pages (not just logo)
NLP systems index text, not images. Your full brand name should appear as text multiple times per key page, not only in logo images, for AI entity extraction.
Medium
Wikipedia / Wikidata entry for brand or key people (if eligible)
Wikipedia and Wikidata are primary entity sources for Google's Knowledge Graph and large language models. If your brand/founder meets notability criteria, a Wikipedia entry dramatically strengthens GEO.
Low
📍

10 · Local SEO

For businesses with physical locations. Controls visibility in Google Maps, the local 3-pack, and "near me" searches.

8 items
Section progress0%
Google Business Profile claimed, verified, and fully completed
Category, description, hours, photos (interior, exterior, team), services, products, Q&A, posts. 100% profile completion correlates with 3-pack visibility. Add a booking link if applicable.
Critical
LocalBusiness JSON-LD with geo coordinates
Include GeoCoordinates (latitude, longitude), openingHoursSpecification, hasMap (Google Maps link), areaServed.
High
NAP consistent across all local citations
Yelp, Bing Places, Apple Maps, Healthgrades, Zocdoc, Angi, and 50+ other directories. Use a citation management tool (BrightLocal, Whitespark) to audit and correct inconsistencies.
Critical
Dedicated location pages for each physical location
Each location page should have unique content (not templated), an embedded Google Map, local staff bios, local reviews, and local schema. Avoid thin pages that are just address + phone number.
High
Reviews strategy in place (requesting, responding, monitoring)
Review velocity, average rating, and response rate are local ranking factors. Respond to every review (positive and negative) within 48 hours. Never incentivise or fabricate reviews.
Critical
City and region keywords in title tags and H1s of location pages
"Hair Transplant Beverly Hills" outranks "Hair Transplant" for local intent. Location modifier in the title is the single strongest local on-page signal.
High
Google Maps embed on contact/location pages
An embedded map confirms physical presence and improves user experience. Use the "Embed a Map" iframe from Google Maps. Adds a trust signal for both users and crawlers.
Medium
Local backlinks from area businesses, press, and community sites
Links from local news, chambers of commerce, local business associations, and area directories are strong local authority signals that national links can't replicate.
High

11 · Accessibility & UX Signals

Accessibility improvements directly overlap with SEO: better semantic HTML, cleaner DOM, and lower bounce rates all help rankings.

7 items
Section progress0%
Semantic HTML elements used throughout (<header>, <main>, <nav>, <footer>, <article>, <section>, <aside>)
Semantic landmarks help screen readers navigate and help crawlers understand content hierarchy. Avoid using <div> and <span> when a semantic tag is appropriate.
High
All interactive elements are keyboard-navigable
Tab through every interactive element: menus, modals, forms, accordions. Focus indicators must be visible. This is WCAG 2.1 Level AA compliance and affects engagement metrics.
High
Colour contrast ratio ≥ 4.5:1 for body text (WCAG AA)
Test with the Chrome DevTools accessibility panel or Colour Contrast Analyser. Low contrast text increases bounce rates and excludes vision-impaired users.
High
Form inputs have associated <label> elements
Placeholder text is not a substitute for a label. Every <input>, <select>, and <textarea> needs a visible or aria-label-associated label.
High
ARIA labels on icon-only buttons and navigation elements
Hamburger menus, social icons, search buttons, close modals — any interactive element without visible text needs aria-label="..." to be usable by screen readers.
High
Site is fully responsive and passes Google Mobile-Friendly Test
Google uses mobile-first indexing. All content visible on desktop must be equally accessible on mobile. Test at search.google.com/test/mobile-friendly.
Critical
Skip navigation link for keyboard users
A visually-hidden "Skip to main content" link as the first element in <body> allows keyboard users to bypass the navigation on every page load. Small effort, high accessibility impact.
Medium
📖

Glossary of Key Terms

Quick reference definitions for the technical concepts used throughout this checklist.

LCP
Largest Contentful Paint — time until the largest visible content element finishes loading. Google target: ≤ 2.5s.
INP
Interaction to Next Paint — how long the browser takes to visually respond to user interactions. Replaced FID in 2024. Target: ≤ 200ms.
CLS
Cumulative Layout Shift — measures unexpected visual instability. Images without dimensions and late-loading ads are the primary causes. Target: ≤ 0.1.
E-E-A-T
Experience, Expertise, Authoritativeness, Trustworthiness — Google's quality evaluator framework, critical for health, finance, and legal (YMYL) content.
GEO
Generative Engine Optimisation — practices that optimise content for citation and accurate representation in AI-generated answers (ChatGPT, Perplexity, Google AI Overviews).
JSON-LD
JavaScript Object Notation for Linked Data — Google's preferred method of injecting structured data schema into a page via a <script type="application/ld+json"> block.
Canonical Tag
A <link rel="canonical"> tag that specifies the preferred URL of a page. Prevents duplicate content penalties when the same content is accessible at multiple URLs.
Open Graph
A protocol (by Facebook/Meta) that defines how web pages appear when shared on social platforms. Controls the title, description, image, and URL shown in social cards.
Twitter Card
X (Twitter)'s equivalent of Open Graph. Uses twitter:card, twitter:title, etc. meta tags to control how links appear when shared on X.
YMYL
Your Money or Your Life — Google's category for content that could significantly impact a person's health, finances, safety, or wellbeing. Subject to stricter E-E-A-T evaluation.
NAP
Name, Address, Phone — the core local business data that must be consistent across your website, Google Business Profile, and all directory citations for local SEO.
Rich Result
An enhanced SERP listing powered by structured data — stars, FAQs, HowTo steps, breadcrumbs, pricing, availability — displayed beyond the standard blue link and description.
Preconnect
A resource hint (<link rel="preconnect">) that instructs the browser to establish the TCP/TLS connection to a third-party origin early, reducing latency when the resource is actually requested.
loading="lazy"
Native HTML attribute that defers loading of an image (or iframe) until it enters the viewport. Reduces initial page load weight. Never apply to LCP candidates.
Mobile-First Indexing
Google's crawling default since 2023 — it indexes the mobile version of your site, not the desktop version. Content visible only on desktop may not be indexed.
Sitemap
An XML file listing all indexable URLs on your site with metadata (priority, changefreq, last modified). Submitted to Google Search Console to guide crawl prioritisation.