# Sources — SEO Playbook Research ## Primary document - [SEO Playbook (raw markdown)](https://raw.githubusercontent.com/madebyaris/rankmyseo/refs/heads/main/docs/seo-playbook.md) — the document analyzed in this research topic ## Toolkit - [RankMySEO GitHub repo](https://github.com/madebyaris/rankmyseo) — OSS SEO toolkit, Apache-2.0 - [RankMySEO Wiki](https://github.com/madebyaris/rankmyseo/wiki) — architecture, roadmap, design decisions - npm scope: [@rankmyseo](https://www.npmjs.com/org/rankmyseo) (v0.3.x) - Author: Aris Setiawan (@madebyaris), Sidoarjo, Indonesia — [madebyaris.com](https://madebyaris.com) ## Authoritative SEO sources (referenced in the playbook) - [Google Search Central](https://developers.google.com/search/docs) — official Google search documentation - [Google Search Essentials](https://developers.google.com/search/docs/essentials) — formerly Webmaster Guidelines - [Search Quality Rater Guidelines](https://developers.google.com/search/blog/2024/11/rater-guidelines-update) — definition of E-E-A-T (Experience, Expertise, Authoritativeness, Trustworthiness) - [web.dev Core Web Vitals](https://web.dev/vitals/) — source of truth for LCP, INP, CLS - [Schema.org](https://schema.org/) — structured data vocabulary - [Bing Webmaster Guidelines](https://www.bing.com/webmasters/help/webmaster-guidelines-30fba232) — now relevant for ChatGPT Search ## Practitioners and publications (referenced in the playbook) - *The Art of SEO* (Enge et al.) — book - [Backlinko](https://backlinko.com/) — blog - [Ahrefs Blog](https://ahrefs.com/blog/) — blog - [Moz Blog](https://moz.com/blog) — blog - Aleyda Solís — international SEO consultant - Lily Ray — E-E-A-T and algorithm update analysis - Marie Haynes — algorithm updates and quality rater perspectives ## RankMySEO on-page audit checks (parameter → check ID) | Parameter | Target | Check ID | |-----------|--------|----------| | Title length | 50-60 chars, keyword front | `title-length` | | Meta description | 70-160 chars | `meta-description` | | Canonical URL | 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` | | HTML lang | declared | `lang-attribute` | | Mobile viewport | `` | `viewport-meta` | | Indexable | no `noindex` | `robots-indexable` | | HTTPS | served over TLS | `https` | | LCP | < 2.5s | `cwv-lcp` | | INP | < 200ms | `cwv-inp` | | CLS | < 0.1 | `cwv-cls` | ## Core Web Vitals thresholds (2026) | Metric | Good | Measures | |--------|------|----------| | LCP | < 2.5s | loading | | INP | < 200ms | responsiveness (replaced FID, March 2024) | | CLS | < 0.1 | visual stability | ## Off-page parameters (practitioner reference, not in OSS v1) | 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 | ## RankMySEO toolkit overview - **License**: Apache-2.0 - **Status**: M0-M5 implemented, published on npm under `@rankmyseo` scope (v0.3.x) - **Stars**: 5 (as of 2026-07-29) - **Commits**: 24 - **Created**: 2026-06-24 - **Architecture**: Monorepo (pnpm + Turborepo), headless core + framework adapters - **Supports**: Node.js ≥ 20, Hono/Express/Next/Nitro/SvelteKit/Astro, SQLite + Postgres (Drizzle/Prisma/Kysely) - **Multi-tenant**: every row scoped by `tenantId` + `projectId` - **AI layer**: AI SDK tools + MCP server for dashboard customization (approval-gated) - **20+ packages** under `@rankmyseo` scope (core, storage, server adapters, react/vue/svelte, ui, cli, agent, scanner, collector, datasource, scheduler)