# IGNY8 Phase 3: WordPress Plugin — Standalone SEO (03A)
## 10-Module Free SEO Plugin for WordPress
**Document Version:** 1.0
**Date:** 2026-03-23
**Phase:** IGNY8 Phase 3 — WordPress Ecosystem
**Status:** Build Ready
**Source of Truth:** Codebase at `/data/app/igny8/`
**Audience:** Claude Code, WordPress Developers, Architects
---
## 1. CURRENT STATE
### Existing WordPress Integration
The IGNY8 WordPress Bridge Plugin v1.5.2 exists at `/data/app/igny8/plugins/wordpress/source/igny8-wp-bridge/`. It provides:
- Content sync from IGNY8 SaaS → WordPress via `POST /wp-json/igny8/v1/sync/push`
- SAG blueprint sync via `POST /wp-json/igny8/v1/sag/sync-blueprint`
- Taxonomy creation via `POST /wp-json/igny8/v1/sag/create-taxonomies`
- API key authentication using `X-IGNY8-API-KEY` header
- REST namespace: `/wp-json/igny8/v1/`
### What Does NOT Exist
- No standalone SEO capabilities (users rely on Yoast/RankMath alongside IGNY8)
- No schema generation, sitemap control, redirect management, or site audit
- No internal link mapping or social sharing features
- No analytics connector or SMTP mail management
- No migration path from competing plugins
### Phase 2 Foundation Available
- 02D Linker Internal: SAGLink model and link scoring logic in IGNY8 backend — feeds the plugin's internal linking module in connected mode
- 02G Rich Schema SERP: 10 JSON-LD schema types and schema validation in IGNY8 backend — feeds the plugin's schema module in connected mode
### What v2 Changes
Phase 3 builds a **completely new plugin** (not a patch to v1.5.2). The v1.5.2 bridge becomes deprecated once v2 is deployed. The new plugin works in two modes:
- **Standalone mode** (this doc): Full free SEO plugin — no IGNY8 subscription required
- **Connected mode** (03B): Extends standalone with IGNY8 SaaS integration
---
## 2. WHAT TO BUILD
### Overview
A comprehensive WordPress SEO plugin with 10 standalone modules that function without an IGNY8 SaaS subscription. Each module is independently toggleable from Settings → Modules. The plugin replaces Yoast SEO, RankMath, or All in One SEO as a complete, free alternative.
### Plugin Identity
- **Plugin Name:** IGNY8
- **Text Domain:** `igny8`
- **REST Namespace:** `/wp-json/igny8/v1/`
- **Option Prefix:** `igny8_`
- **Post Meta Prefix:** `_igny8_`
- **Term Meta Prefix:** `_igny8_term_`
- **Table Prefix:** `{wp_prefix}igny8_`
- **Min Requirements:** WordPress 5.9+, PHP 7.4+
- **License:** GPL v2+
- **Public API:** `igny8()` returns main singleton — e.g., `igny8()->seo->get_title()`, `igny8()->schema->get_json_ld()`
### Module 1: SEO Core
**Purpose:** Focus keyword management, title/meta tag control, content analysis, Open Graph, breadcrumbs, and robots meta — the foundation of on-page SEO.
**Classes:**
| Class | File | Purpose |
|-------|------|---------|
| `IGNY8_SEO_Module` | `modules/seo/class-seo-module.php` | Module bootstrap, hook registration |
| `IGNY8_Meta_Box` | `modules/seo/class-meta-box.php` | Post editor meta box UI + save handler |
| `IGNY8_Title_Tag` | `modules/seo/class-title-tag.php` | `
` management via `document_title_parts` filter |
| `IGNY8_Meta_Tags` | `modules/seo/class-meta-tags.php` | Output `` description, robots, canonical in `` |
| `IGNY8_Content_Analysis` | `modules/seo/class-content-analysis.php` | Real-time SEO scoring in admin JS |
| `IGNY8_Breadcrumbs` | `modules/seo/class-breadcrumbs.php` | Breadcrumb HTML generation + BreadcrumbList schema |
| `IGNY8_OpenGraph` | `modules/seo/class-opengraph.php` | OG + Twitter Card meta tags |
| `IGNY8_Robots_Txt` | `modules/seo/class-robots-txt.php` | Virtual robots.txt manager |
| `IGNY8_Verification` | `modules/seo/class-verification.php` | Webmaster verification code output |
**Features:**
- Focus keyword per post/page/product (primary + secondary keywords array)
- SEO title + meta description editor with live SERP preview
- Content analysis: keyword density, heading structure, readability (Flesch-Kincaid)
- Title tag templates per post type, taxonomy, author, and date archives
- Breadcrumbs via shortcode `[igny8_breadcrumbs]` + function `igny8()->seo->get_breadcrumbs()`
- Open Graph meta tags (og:title, og:description, og:image, og:type)
- Twitter Cards (twitter:card, twitter:title, twitter:description, twitter:image)
- Robots meta per post (noindex, nofollow, noarchive)
- Canonical URL override
- Webmaster verification codes (Google, Bing, Yandex, Pinterest)
- Consolidated `wp_head` output at priority 1 — single hook for all ``, meta, OG, robots, canonical, schema
**Post Meta Keys:**
```
_igny8_focus_keyword -- string: primary focus keyword
_igny8_secondary_keywords -- JSON array: additional target keywords
_igny8_seo_title -- string: custom SEO title
_igny8_meta_description -- string: custom meta description
_igny8_canonical_url -- string: canonical URL override
_igny8_robots_index -- string: index/noindex
_igny8_robots_follow -- string: follow/nofollow
_igny8_og_title -- string: OG title override
_igny8_og_description -- string: OG description override
_igny8_og_image -- int: attachment ID for OG image
_igny8_twitter_title -- string: Twitter title override
_igny8_twitter_description -- string: Twitter description override
_igny8_seo_score -- int: 0-100 overall SEO score
_igny8_content_score -- int: 0-100 content quality score
_igny8_readability_score -- float: Flesch-Kincaid readability
_igny8_last_analysis -- string: ISO timestamp of last analysis
```
**Term Meta Keys:**
```
_igny8_term_seo_title -- string: term archive SEO title
_igny8_term_meta_description -- string: term archive meta description
_igny8_term_robots_index -- string: index/noindex
_igny8_term_og_image -- int: attachment ID
```
**Options:**
```
igny8_seo_settings -- JSON: {title_templates: {...}, separator: " | ", defaults: {...}}
igny8_social_profiles -- JSON: {facebook, twitter, linkedin, youtube, instagram, pinterest}
```
**Hooks:**
- Actions: `wp_head` (priority 1), `add_meta_boxes`, `save_post`, `document_title_parts`
- Filters: `igny8_title_parts`, `igny8_title_separator`, `igny8_meta_description`, `igny8_robots_meta`, `igny8_canonical_url`, `igny8_breadcrumbs`, `igny8_seo_score`
### Module 2: Schema (JSON-LD)
**Purpose:** Automatic and customizable structured data markup for rich search results.
**Classes:**
| Class | File | Purpose |
|-------|------|---------|
| `IGNY8_Schema_Module` | `modules/schema/class-schema-module.php` | Module bootstrap |
| `IGNY8_Schema_Generator` | `modules/schema/class-schema-generator.php` | Main dispatcher, merges all types |
| `IGNY8_Schema_Article` | `modules/schema/class-schema-article.php` | Article/BlogPosting schema |
| `IGNY8_Schema_LocalBusiness` | `modules/schema/class-schema-local-business.php` | LocalBusiness schema |
| `IGNY8_Schema_Product` | `modules/schema/class-schema-product.php` | Product schema (WooCommerce) |
| `IGNY8_Schema_FAQ` | `modules/schema/class-schema-faq.php` | FAQPage schema |
| `IGNY8_Schema_HowTo` | `modules/schema/class-schema-howto.php` | HowTo schema |
| `IGNY8_Schema_Organization` | `modules/schema/class-schema-organization.php` | Organization/Person |
| `IGNY8_Schema_WebPage` | `modules/schema/class-schema-webpage.php` | WebPage/CollectionPage |
| `IGNY8_Schema_Breadcrumb` | `modules/schema/class-schema-breadcrumb.php` | BreadcrumbList |
| `IGNY8_Schema_Service` | `modules/schema/class-schema-service.php` | Service schema |
| `IGNY8_Schema_Custom` | `modules/schema/class-schema-custom.php` | Raw JSON-LD editor |
**Features:**
- Auto-detect schema type per post type
- 10 supported types: Article/BlogPosting, Organization/Person, WebPage/CollectionPage, BreadcrumbList, FAQPage, HowTo, LocalBusiness, Service, Product (WooCommerce), WebSite+SearchAction
- Custom schema editor (raw JSON-LD input)
- Schema validation against Google Rich Results requirements
- Global settings: Organization vs Person, default types per post type
- Single `