# SEO Playbook — On-Page & Off-Page A practitioner reference for what makes a site rank, the parameters worth tracking, and how RankMySEO's audit engine maps onto them. This is the knowledge base behind the on-page checks in [`packages/core/src/engine/audit.ts`](../packages/core/src/engine/audit.ts). --- ## Knowledge foundation The only authoritative sources are primary docs and the rater guidelines: - **Google Search Central** + the **Search Quality Rater Guidelines** (definition of **E-E-A-T**). - **Google Search Essentials** (formerly Webmaster Guidelines). - **web.dev** — source of truth for **Core Web Vitals**. - **Schema.org** — structured data vocabulary. - **Bing Webmaster Guidelines** (now relevant for ChatGPT Search). Books/practitioners: *The Art of SEO* (Enge et al.), Backlinko, Ahrefs/Moz blogs, Aleyda Solís, Lily Ray (E-E-A-T), Marie Haynes (algorithm updates). 2026 frontier: **GEO/AEO** — Generative/Answer Engine Optimization — being the *cited source* inside AI Overviews, ChatGPT Search, Perplexity, Gemini. The same fundamentals (clear, factual, well-structured, trustworthy content) win here too. > Meta-principle: Google rewards demonstrable expertise, trust, and a genuinely good > user experience — not tricks. --- ## The big picture ```mermaid graph TD SEO([SEO Strategy]) --> TECH[Technical SEO
the foundation] SEO --> ON[On-Page SEO
content & HTML] SEO --> OFF[Off-Page SEO
authority & trust] SEO --> UX[UX & Core Web Vitals] SEO --> GEO[GEO / AEO
AI & answer engines] TECH --> T1[Crawlability] TECH --> T2[Indexability] TECH --> T3[Site Architecture] TECH --> T4[Structured Data] ON --> O1[Content Quality / E-E-A-T] ON --> O2[Keyword & Intent Match] ON --> O3[HTML Tags & Semantics] ON --> O4[Internal Linking] OFF --> F1[Backlinks] OFF --> F2[Brand Signals] OFF --> F3[Local / Citations] OFF --> F4[Digital PR] UX --> U1[LCP / INP / CLS] UX --> U2[Mobile-first] GEO --> G1[Citable, factual content] GEO --> G2[Structured answers] ``` --- ## On-page SEO — parameters ```mermaid graph LR PAGE([A Single Page]) --> META[Metadata] PAGE --> CONTENT[Content] PAGE --> STRUCT[Structure] PAGE --> MEDIA[Media] META --> M1["title 50-60 chars"] META --> M2["meta description 140-160"] META --> M3["canonical URL"] META --> M4["Open Graph / Twitter"] CONTENT --> C1["Search-intent match"] CONTENT --> C2["E-E-A-T signals"] CONTENT --> C3["Keyword + semantic terms"] CONTENT --> C4["Depth & freshness"] STRUCT --> S1["one H1, logical H2-H6"] STRUCT --> S2["clean URL slug"] STRUCT --> S3["internal links"] STRUCT --> S4["JSON-LD schema"] MEDIA --> I1["alt text"] MEDIA --> I2["WebP/AVIF, compressed"] MEDIA --> I3["width+height (no CLS)"] ``` | Parameter | Target | RankMySEO check | | --- | --- | --- | | Title length | 50–60 chars, keyword front | `title-length` | | Meta description | 70–160 chars | `meta-description` | | Canonical | self-referencing / preferred URL | `canonical` | | Single H1 | exactly one | `single-h1` | | Subheading structure | ≥1 H2 | `heading-structure` | | Open Graph | og:title/description/image | `og-tags` | | Structured data | valid JSON-LD | `json-ld` | | Image alt text | every meaningful image | `image-alt` | | Content depth | not thin (≥ ~250 words) | `content-depth` | | `` | declared | `lang-attribute` | | Mobile viewport | `` | `viewport-meta` | | Indexable | no `noindex` | `robots-indexable` | | HTTPS | served over TLS | `https` | | LCP | < 2.5 s | `cwv-lcp` | | INP | < 200 ms (replaced FID, 2024) | `cwv-inp` | | CLS | < 0.1 | `cwv-cls` | --- ## Off-page SEO — parameters > Out of scope for the RankMySEO OSS audit engine (no backlink crawling in v1 — see > the [Architecture](https://github.com/madebyaris/rankmyseo/wiki/Architecture) wiki, "OSS vs future SaaS"). > Listed here as the practitioner reference; plug a custom `RankDataSource` to ingest these. ```mermaid graph TD OFF([Off-Page SEO]) --> LINKS[Backlink Profile] OFF --> BRAND[Brand & Entity] OFF --> LOCAL[Local SEO] OFF --> SOCIAL[Social & PR] LINKS --> L1["referring domains (unique)"] LINKS --> L2["authority of linking sites"] LINKS --> L3["topical relevance"] LINKS --> L4["natural anchor text mix"] LINKS --> L5["dofollow/nofollow ratio"] LINKS --> L6["link velocity"] LINKS --> L7["toxic-link avoidance"] BRAND --> B1["branded search volume"] BRAND --> B2["unlinked mentions"] BRAND --> B3["Knowledge Graph entity"] BRAND --> B4["consistent NAP"] LOCAL --> LO1["Google Business Profile"] LOCAL --> LO2["citations / directories"] LOCAL --> LO3["reviews"] SOCIAL --> SO1["shares & engagement"] SOCIAL --> SO2["digital PR"] ``` | Parameter | What good looks like | | --- | --- | | Referring domains | steady growth of unique, relevant domains | | Link quality | high-authority, topically relevant sources | | Anchor text profile | mostly branded/natural; small exact-match % | | dofollow/nofollow mix | natural blend | | Link velocity | organic pace, no spikes | | Toxic links | monitored; disavow only clear spam | | Branded search | rising brand queries | | Brand mentions | linked + unlinked | | Google Business Profile | complete, verified, active | | Reviews | volume + rating + recency + responses | | NAP consistency | identical across citations | | Digital PR | earned coverage in authoritative media | --- ## Core Web Vitals thresholds (2026) | Metric | Good | Measures | | --- | --- | --- | | **LCP** | < 2.5 s | loading | | **INP** | < 200 ms | responsiveness (replaced FID, Mar 2024) | | **CLS** | < 0.1 | visual stability | --- ## Master workflow ```mermaid flowchart TD A[1. Keyword & intent research] --> B[2. Map keywords to pages / clusters] B --> C{3. Technical foundation healthy?} C -->|No| C1[Fix crawl, index, speed, mobile] C1 --> D C -->|Yes| D[4. On-page content with E-E-A-T] D --> E[5. Internal linking & topical authority] E --> F[6. Earn backlinks & brand mentions] F --> G[7. Optimize for AI Overviews / GEO] G --> H[8. Measure: rankings, traffic, conversions, CWV] H --> I{Improving?} I -->|Yes| J[Scale what works] I -->|No| A J --> A ```