1 · Technical Foundation
The baseline infrastructure every page must have before any other SEO work is meaningful.
<title> on every pagerel="canonical") on every pageindex, follow. Legal/utility pages (privacy, terms, thank-you, admin): noindex, follow. Never accidentally noindex key pages.lang attribute on <html>lang="en" (or appropriate locale). Critical for accessibility, translation tools, and voice search.content="width=device-width, initial-scale=1.0"UTF-8) as first child of <head>2 · On-Page & Content SEO
Heading hierarchy, keyword placement, internal linking, and content signals that directly influence rankings.
<h1> per page containing the primary keyword_blank with rel="noopener"rel="noopener noreferrer" prevents the opened page from accessing your window object./hair-transplant-beverly-hills/ beats /page?id=142.BreadcrumbList JSON-LD.dateModified in JSON-LD.3 · Open Graph (OG) Tags
Controls how your pages appear when shared on Facebook, LinkedIn, WhatsApp, Slack, and most chat apps.
og:title on every page<title> tag — can be more descriptive or punchy since character limits are less strict in OG context. 60–90 chars recommended.og:description on every pageog:image — 1200×630 px dedicated social cardog:image:width and og:image:heightog:image.<meta property="og:image:height" content="630" />
og:image:alt — descriptive text for the social imageog:url — absolute canonical URLog:type set correctlywebsite for most pages, article for blog posts, product for e-commerce pages. Omitting defaults to website but explicit is better.og:site_name — your brand nameog:locale — e.g. en_USlanguage_TERRITORY. Add og:locale:alternate if serving multiple languages.4 · Twitter / X Card Tags
Controls appearance on X (Twitter) — also used by some other social platforms that don't read OG tags.
twitter:card set on every pagesummary_large_image for content pages (shows a large image). summary for utility/legal pages without images. Required — without it, no card renders.twitter:title — concise and under 70 charsog:title, but explicit values are more reliable.twitter:descriptionog:description if absent.twitter:image — same 1200×630 social cardsummary_large_image. Use an absolute HTTPS URL. Twitter fetches this on first share and caches it.twitter:image:alttwitter:site — your @handle@YourBrand). Attribution shown in the card footer. Builds social identity association with your domain.cards-dev.twitter.com/validator and enter your URL. Clears the cache and confirms your card renders correctly on X.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.
Organization or LocalBusiness schema on homepage@id, name, url, logo, sameAs (social profiles), address, telephone. This creates your brand entity for the Knowledge Graph.WebSite schema with SearchAction (Sitelinks Searchbox)potentialAction with a SearchAction pointing to your search URL.WebPage schema on every page@type, @id, name, url, description, isPartOf (linking to the WebSite entity). Helps AI understand page purpose.FAQPage schema where FAQ content existsacceptedAnswer/Question structure. Can generate People Also Ask expansion in SERPs and AI overview citations.HowTo schema for process/step contentAggregateRating schema for review pagesratingValue, ratingCount/reviewCount, and bestRating. Only mark up genuine ratings visible on page.Review items in testimonials schemaauthor, reviewBody, reviewRating. Combined with AggregateRating to substantiate the aggregate score.Person schema for key team membersBreadcrumbList schema matching visible breadcrumbssearch.google.com/test/rich-results. Fix all errors; review warnings. Revalidate after any structural change.sameAs array includes all canonical social profiles6 · Core Web Vitals & Page Experience
Google's user experience ranking signals: LCP, INP, CLS. Directly impact rankings since the Page Experience update.
loading="lazy" to it. Use loading="eager" or no attribute (eager is default).rel="preload"<head> so the browser starts fetching before it reaches the img tag.<head> blocks rendering. Inline critical (above-fold) CSS in a <style> tag; load the rest asynchronously.<img> tags have explicit width and height attributeswidth/height to the intrinsic image dimensions; control display size with CSS.font-display: swap or are preloadedfont-display: swap prevents invisible text during font load (FOIT) — shows fallback font instead. Improves both CLS and LCP perception.requestAnimationFrame, setTimeout, or Web Workers to split heavy work.defer or async. Audit with Lighthouse "Unused JavaScript" report.pagespeed.web.dev on every key page. Focus on mobile — Google indexes mobile-first. CWV thresholds: LCP ≤2.5s, INP ≤200ms, CLS ≤0.1.7 · Image Optimisation
Images are typically the heaviest assets on a page. Proper optimisation reduces page weight, improves LCP, and enhances image search visibility.
alt textalt="". Critical for accessibility (WCAG 1.1.1) and image search.loading="lazy" on all below-fold images<picture> with <source> for format negotiation, with JPEG fallback.srcset for responsive images across device pixel ratios.IMG_0032.jpg)hair-transplant-before-after-beverly-hills.jpg.image:image) in sitemap for key images<image:image> extensions to your XML sitemap helps Google discover images for Image Search, especially for e-commerce or medical before/after content.<img> tags (use CSS background)<img> elements. This keeps them out of the accessibility tree and reduces DOM size.8 · Crawlability & Indexing
Controls what search engines discover, crawl, index, and how they navigate your site. Errors here can make your entire site invisible.
robots.txt present and correct/robots.txt. Must include Sitemap: directive. Disallow only private/utility pages (admin, staging, legal). Never accidentally disallow /.Allow: /
Disallow: /admin/
Sitemap: https://example.com/sitemap.xml
/sitemap.xml. Include all indexable URLs. Set <priority> and <changefreq>. Submit via Google Search Console → Sitemaps.noindex on important pagesmeta robots tag and HTTP X-Robots-Tag header. Use Google Search Console to detect any noindexed pages.rel="next"/prev" or self-canonicalised)rel="next"/prev to signal the sequence to Googlebot.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 · Local SEO
For businesses with physical locations. Controls visibility in Google Maps, the local 3-pack, and "near me" searches.
LocalBusiness JSON-LD with geo coordinatesGeoCoordinates (latitude, longitude), openingHoursSpecification, hasMap (Google Maps link), areaServed.11 · Accessibility & UX Signals
Accessibility improvements directly overlap with SEO: better semantic HTML, cleaner DOM, and lower bounce rates all help rankings.
<header>, <main>, <nav>, <footer>, <article>, <section>, <aside>)<div> and <span> when a semantic tag is appropriate.<label> elements<input>, <select>, and <textarea> needs a visible or aria-label-associated label.aria-label="..." to be usable by screen readers.search.google.com/test/mobile-friendly.<body> allows keyboard users to bypass the navigation on every page load. Small effort, high accessibility impact.Glossary of Key Terms
Quick reference definitions for the technical concepts used throughout this checklist.