Skip to content

SEO

Last verified:

View Markdown

Based on Google Search Essentials and the Search Central docs. No trick replaces a fast, crawlable site with genuinely useful pages. Check the docs before using any feature with a date or “supported” status.

  • Public content is in the server or pre-rendered HTML with a 200 status. Missing pages return a real 404 or 410, never a 200 “not found” page.
  • Links are real <a href> elements with resolvable URLs. Google does not click buttons, run onclick navigation or follow #fragment routes.
  • Don’t block CSS, JS or images that are needed to render the page in robots.txt. robots.txt controls crawling, not indexing: use noindex to keep a page out, and don’t block that page in robots.txt or Google never sees the noindex.
  • Previews, staging, internal search results, thin tag pages and account pages are noindex. Protect private content with authentication, not noindex.
  • The mobile page has the same content, links, metadata and structured data as desktop (mobile-first indexing).
  • XML sitemap lists only canonical, indexable 200 URLs, with lastmod only when it is accurate (Google ignores priority and changefreq). Link it from robots.txt and submit it.
  • URLs are readable words in lowercase, separated by hyphens, in a logical hierarchy. No session IDs or tracking parameters in internal links.
  • One host, one protocol (HTTPS) and one trailing-slash style. Redirect every variant with a 301 to it.
  • When a URL changes, 301-redirect the old one permanently, update internal links and the sitemap. Avoid redirect chains.
  • Every indexable page has an absolute, self-referencing rel="canonical". Duplicates point to the preferred URL. Paginated pages each get their own canonical; never canonicalise page 2 to page 1.
  • Multilingual sites use hreflang on every version, including a self-reference and x-default. Never auto-redirect by IP or browser language.
  • Each page has a unique, concise, descriptive <title> that leads with the page’s topic and adds the site name briefly. No keyword stuffing or boilerplate titles. Google may rewrite poor titles.
  • Each page has a unique meta description that summarises it, with the most important information first. Google sets no character limit and may show other text instead; about 50–60 characters for titles and 120–160 for descriptions is a house heuristic that limits truncation, not a Google rule.
  • One visible main heading that matches the title’s intent. Headings form a logical outline.
  • Use data-nosnippet, max-snippet or nosnippet only when you need to limit what search and AI features quote.
  • Social previews: og:title, og:description, og:url, a 1200×630 og:image with alt, and twitter:card.
  • Articles show a visible author (linked to an author page) and published and updated dates that match datePublished and dateModified.
  • Set the site name with WebSite structured data on the home page. The favicon is square, at least 48×48 px, at a stable crawlable URL.
  • Plan the site map first. Every important page is reachable through crawlable internal links within a few clicks of home. Breadcrumbs show typical user paths; a page in several hierarchies may have several trails.
  • No orphan pages. Link up to the hub, across to siblings and down to details. Link text describes the target (“pricing for teams”, not “click here”).
  • Categories and tags come from a fixed list in code. Index a tag page only once it has real content (3 or more items).
  • Listing and pagination pages link each page with plain <a href> links. Client-side filters only show or hide items; filter combinations that are not real landing pages are noindex or not linked.
  • Mark paid, sponsored or user-generated outbound links with rel="sponsored" or rel="ugc" (nofollow when neither applies).
  • Important images are <img> elements (not CSS backgrounds) with descriptive alt, a descriptive filename and nearby relevant text.
  • Use responsive images in modern formats (see performance). Add max-image-preview:large where large previews are wanted.
  • Video has a dedicated watch page, a thumbnail, and VideoObject structured data.
  • Use JSON-LD, generated from the same data that renders the page. Mark up only content visible on the page; never invent reviews, ratings or prices.
  • One @graph per page with stable @ids: WebSite and Organization or Person site-wide; BreadcrumbList; then the page type (Article/BlogPosting, Product, SoftwareApplication, Event, LocalBusiness, Recipe, JobPosting, VideoObject) where it fits.
  • Only features in Google’s current Search Gallery can produce rich results. Google no longer shows FAQ or HowTo rich results, so don’t add that markup for Google Search.
  • Validate with the Rich Results Test and the Schema Markup Validator. Check the Search Console enhancement reports after release.
  • Cloaking, sneaky redirects, hidden text or links, keyword stuffing, doorway pages, or link schemes (bought, exchanged or automated links).
  • Scaled content abuse: mass-producing pages (by AI or otherwise) mainly to rank, without real value for readers.
  • Site reputation abuse (hosting third-party pages to exploit the site’s ranking) and expired-domain abuse.
  • Verify Google Search Console and Bing Webmaster Tools, and submit the sitemap. Check the page indexing, Core Web Vitals and manual actions reports.
  • Before launch: no noindex or Disallow: / left over from staging, canonicals point to production URLs, redirects for any old URLs, and every template passes the Rich Results Test.
  • Review indexing and performance reports monthly. Investigate sudden drops by page type and query.