The on-page non-negotiables. The SEO agent owns this layer; nothing here is written inline by whoever happens to be editing.

Non-negotiables (every page)

  • Meta title: unique, Title Case, under pixel/character caps, no ambiguous fragments
  • Meta description: unique, in the fill band (preview it in a SERP snippet tool), no colons (one separator style per site)
  • One H1, matches JSON-LD headline exactly
  • Slug: short, keyword-bearing, lowercase, hyphens
  • Canonical + Open Graph (og:title, og:description, og:image) on every page
  • Schema: the big organization graph on the homepage ONLY; every other page carries just its own page-type schema; FAQ schema answers verbatim = visible answers. Validate with the Rich Results Test and the schema.org validator
  • Internal links: every page linked FROM and TO; anchors describe the destination page's topic, never generic verbs
  • Images: unique title + keyword alt
  • Sitemap entry with real lastmod (random seconds, never :00)

Make the contract machine-checkable

  1. Write the site's SEO contract as one spec file in the repo (bands, separator rules, canonical host, schema mapping), human-readable on top, machine-readable below.
  2. Wire a validator that checks every page against that spec (title and description bands, duplicates, canonicals, OG mirrors, one H1, schema headline = H1, sitemap listing).
  3. Run it after every finished page and in the pre-deploy gate; a violation fails the build. Rules an AI might skip, a script never does.

Schema coverage SOP (run once at build, rerun on every new page type)

  1. List every entity the site represents: the business, the website, each page type, articles, tools, FAQs, breadcrumbs, people, products, events, local presence.
  2. Map each entity to its closest specific type on schema.org; prefer the specific type over the generic one (ProfessionalService over Organization alone, WebApplication over WebPage for a tool).
  3. List the properties each type wants and mark what you do not know.
  4. Check the project's COMPANY.md first (the company facts file every project keeps at its repo root); ask the owner ONLY for facts it does not hold, and save every new answer there so nothing is asked twice. NEVER invent a value; a property you cannot source gets left out.
  5. Add the JSON-LD to the pages.
  6. Validate every page with the Rich Results Test and the schema.org validator.

Publish standards (per page)

  • 600+ words, custom meta, target keyword, 3+ internal links, in the sitemap

Done when

More