799 lines
38 KiB
Markdown
799 lines
38 KiB
Markdown
# IGNY8 WordPress Plugin — Complete Build Plan
|
|
|
|
**By:** Alorig Systems
|
|
**For:** AI Agent (Claude Code / Opus 4.6 in VSCode)
|
|
**Version:** 1.0
|
|
**Date:** March 2026
|
|
**Status:** Reference Document for Development
|
|
|
|
---
|
|
|
|
## Executive Summary
|
|
|
|
The IGNY8 WordPress Plugin is the **first site-level SEO plugin for WordPress**. Unlike Yoast, RankMath, or AIOSEO — which optimize individual pages against individual keywords — IGNY8 analyzes and optimizes your entire site's architecture, taxonomy structure, internal linking graph, and topical authority.
|
|
|
|
**Two modes:**
|
|
1. **Standalone (Free):** Full SEO plugin replacing Yoast/RankMath — meta tags, schema, sitemaps, redirects, social OG, analytics, GSC, internal linking analysis, site-level architecture insights. No IGNY8 app account needed.
|
|
2. **Connected (Premium):** Links to IGNY8 SaaS platform — AI content generation, SAG blueprint sync, automated taxonomy creation, content pipeline, automated publishing, full site architecture generation.
|
|
|
|
**Distribution:** Free on WordPress.org repository. Connected features require IGNY8 app subscription.
|
|
|
|
---
|
|
|
|
## Part 1: Product Positioning
|
|
|
|
### 1.1 What Exists Today (Page-Level Plugins)
|
|
|
|
Every current SEO plugin does essentially the same thing:
|
|
- Set a focus keyword per page
|
|
- Analyze keyword density, heading usage, meta length
|
|
- Generate XML sitemap
|
|
- Add meta tags and OG tags
|
|
- Basic schema markup
|
|
- Redirect manager
|
|
|
|
They optimize pages in isolation. They have no concept of how pages relate to each other, whether your site has topical gaps, whether your taxonomy structure creates authority, or whether your internal linking flows power to the right pages.
|
|
|
|
### 1.2 What IGNY8 Plugin Does Differently
|
|
|
|
**Site-Level Intelligence (Free):**
|
|
- Taxonomy coverage analysis: "You have 45 categories but only 12 have content — 33 are empty archive pages hurting your authority"
|
|
- Orphan page detection: "These 28 posts have zero internal links pointing to them"
|
|
- Topical gap analysis: "Your site covers 'dog food' extensively but has zero content about 'dog nutrition' — a closely related topic your competitors rank for"
|
|
- Internal link graph visualization: which pages are over-linked, under-linked, or isolated
|
|
- Cluster detection: automatically groups existing content into topical clusters and identifies imbalances
|
|
- Thin content identification: pages below content thresholds that need expansion
|
|
- Cannibalization detection: multiple pages targeting the same keyword
|
|
|
|
**Site Architecture Generation (Connected):**
|
|
- SAG blueprint sync: receive the full dimensional structure (attributes, clusters, keywords) from IGNY8 platform
|
|
- Automated taxonomy creation: create all WordPress taxonomies, terms, and hierarchies from the SAG blueprint
|
|
- Content pipeline: pull AI-generated content for posts, pages, term descriptions, hub pages
|
|
- Publishing automation: scheduled publishing with review workflow
|
|
- Ongoing optimization: content updates, new cluster detection, gap filling
|
|
|
|
### 1.3 The Free → Connected Funnel
|
|
|
|
User installs free plugin → sees site-level insights they've never had before → dashboard shows: "IGNY8 has identified 23 topical gaps and 15 missing taxonomy terms. Connect to IGNY8 to generate the full blueprint and auto-fill these gaps." → User signs up for IGNY8 app → Connects via API key → Full architecture generation begins.
|
|
|
|
The free plugin must be genuinely excellent. Not a crippled demo. A real replacement for RankMath that makes people switch.
|
|
|
|
---
|
|
|
|
## Part 2: Module Architecture
|
|
|
|
### 2.1 Module Map
|
|
|
|
| Module | Free | Connected | Replaces |
|
|
|---|---|---|---|
|
|
| **SEO Core** | ✅ Full | ✅ Enhanced | Yoast, RankMath, AIOSEO |
|
|
| **Schema** | ✅ Full | ✅ Enhanced | Schema Pro, JSON-LD plugins |
|
|
| **Sitemap** | ✅ Full | ✅ Full | Yoast sitemap, XML Sitemap Generator |
|
|
| **Redirects** | ✅ Full | ✅ Full | Redirection plugin |
|
|
| **Social & OG** | ✅ Full | ✅ Enhanced | Social Warfare, OG plugins |
|
|
| **Analytics** | ✅ Full | ✅ Full | MonsterInsights, GA plugins |
|
|
| **Site Intelligence** | ✅ Basic | ✅ Full | Nothing (unique) |
|
|
| **Internal Linking** | ✅ Suggestions | ✅ Auto-linking | Link Whisper |
|
|
| **GSC Integration** | ✅ Dashboard | ✅ Full + Indexing API | Search Console plugins |
|
|
| **Content Sync** | ❌ | ✅ Full | — |
|
|
| **SAG Structure** | ❌ | ✅ Full | — |
|
|
| **Taxonomy Manager** | ❌ | ✅ Full | — |
|
|
| **Socializer** | ✅ Basic sharing | ✅ Auto-posting | Buffer, Hootsuite |
|
|
| **SMTP** | ✅ Full | ✅ Full | WP Mail SMTP |
|
|
|
|
### 2.2 Free vs Connected Feature Split
|
|
|
|
**SEO Core — Free:**
|
|
- Focus keyword per post/page
|
|
- SEO title + meta description with SERP preview
|
|
- Canonical URL management
|
|
- Robots meta (index/noindex, follow/nofollow)
|
|
- Content analysis (keyword density, headings, readability, internal links)
|
|
- Title tag template system (site-wide patterns)
|
|
- Breadcrumb generation + schema
|
|
- Webmaster verification codes
|
|
|
|
**SEO Core — Connected additions:**
|
|
- Multi-keyword optimization (primary + secondary keywords from cluster)
|
|
- Cluster-aware content scoring ("this post covers 60% of its cluster's keyword targets")
|
|
- Auto-suggest missing headings based on cluster keyword gaps
|
|
- Content freshness scoring and update recommendations
|
|
|
|
**Site Intelligence — Free (Basic):**
|
|
- Total page count by type (posts, pages, products, terms)
|
|
- Orphan pages list (no internal links)
|
|
- Thin content list (below word count threshold)
|
|
- Empty taxonomy terms list
|
|
- Basic internal link count per page
|
|
- Duplicate title/meta detection
|
|
- Cannibalization warnings (same keyword on multiple pages)
|
|
|
|
**Site Intelligence — Connected (Full):**
|
|
- Full SAG gap analysis (missing clusters, missing terms, missing attribute values)
|
|
- Cluster health scores (content coverage, link density, keyword rankings per cluster)
|
|
- Competitor gap comparison (connected to IGNY8 platform competitor analysis)
|
|
- Architecture blueprint with recommended new pages/terms
|
|
- Priority queue: which gaps to fill first (by volume, difficulty, existing authority)
|
|
- Topical authority scoring per cluster
|
|
|
|
**Internal Linking — Free:**
|
|
- Link audit: total internal links, broken links, nofollow links
|
|
- Per-post link count and suggestions ("this post could link to these 5 related posts")
|
|
- Orphan content detection
|
|
- Link equity distribution overview
|
|
|
|
**Internal Linking — Connected:**
|
|
- SAG-aware automatic link suggestions based on cluster relationships
|
|
- Bulk link insertion tool
|
|
- Link template rules ("always link [keyword] to [URL]")
|
|
- Contextual link placement (AI-determined best anchor text and position)
|
|
- Link priority scoring based on cluster importance
|
|
|
|
**Socializer — Free:**
|
|
- Lightweight share buttons (pure CSS/JS, no external dependencies)
|
|
- Position options: floating, above/below content, inline
|
|
- Networks: Facebook, X, LinkedIn, Pinterest, WhatsApp, Telegram, Email, Copy Link
|
|
- Social profile links management (site-wide)
|
|
- OG tags (handled by SEO Core module)
|
|
|
|
**Socializer — Connected:**
|
|
- Auto-post to social platforms on WordPress publish
|
|
- Per-platform message templates
|
|
- Scheduling (publish now or delay)
|
|
- Platform API connections: X, Facebook Pages, LinkedIn, Instagram
|
|
- Dynamic OG image generation from post title + featured image
|
|
- Social post performance tracking (clicks, engagement)
|
|
- Bulk social scheduling for existing content
|
|
|
|
---
|
|
|
|
## Part 3: Plugin File Structure
|
|
|
|
```
|
|
igny8/
|
|
├── igny8.php # Plugin header, bootstrap, module loader
|
|
├── readme.txt # WordPress.org readme
|
|
├── uninstall.php # Cleanup on uninstall
|
|
│
|
|
├── includes/
|
|
│ ├── class-igny8.php # Main plugin class
|
|
│ ├── class-module-manager.php # Module registration + activation
|
|
│ ├── class-api-client.php # IGNY8 platform API client (for connected mode)
|
|
│ ├── class-connection.php # API key validation, connection status
|
|
│ ├── class-utils.php # Shared utilities
|
|
│ ├── class-ajax.php # Shared AJAX handler
|
|
│ ├── class-rest-api.php # Plugin REST endpoints for theme communication
|
|
│ ├── class-compatibility.php # Detect and disable conflicting plugins
|
|
│ │
|
|
│ ├── modules/
|
|
│ │ │
|
|
│ │ ├── seo/
|
|
│ │ │ ├── class-seo-module.php # Module entry, hooks
|
|
│ │ │ ├── class-meta-box.php # Post/page SEO meta box
|
|
│ │ │ ├── class-title-tag.php # Title tag management + templates
|
|
│ │ │ ├── class-meta-tags.php # Meta description, robots, canonical
|
|
│ │ │ ├── class-content-analysis.php # Real-time SEO scoring
|
|
│ │ │ ├── class-breadcrumbs.php # Breadcrumb generation + shortcode
|
|
│ │ │ ├── class-opengraph.php # OG + Twitter Card meta tags
|
|
│ │ │ ├── class-robots-txt.php # Virtual robots.txt manager
|
|
│ │ │ ├── class-verification.php # Webmaster tool verification codes
|
|
│ │ │ └── views/
|
|
│ │ │ ├── meta-box.php # Meta box template
|
|
│ │ │ └── settings.php # SEO settings page template
|
|
│ │ │
|
|
│ │ ├── schema/
|
|
│ │ │ ├── class-schema-module.php # Module entry
|
|
│ │ │ ├── class-schema-generator.php # JSON-LD output
|
|
│ │ │ ├── class-schema-article.php # Article, BlogPosting, NewsArticle
|
|
│ │ │ ├── class-schema-local-business.php # LocalBusiness + subtypes
|
|
│ │ │ ├── class-schema-product.php # Product (WooCommerce integration)
|
|
│ │ │ ├── class-schema-faq.php # FAQPage
|
|
│ │ │ ├── class-schema-howto.php # HowTo
|
|
│ │ │ ├── class-schema-organization.php # Organization / Person
|
|
│ │ │ ├── class-schema-webpage.php # WebPage, CollectionPage
|
|
│ │ │ ├── class-schema-breadcrumb.php # BreadcrumbList
|
|
│ │ │ ├── class-schema-service.php # Service (for service CPT)
|
|
│ │ │ └── class-schema-custom.php # Custom schema field (advanced users)
|
|
│ │ │
|
|
│ │ ├── sitemap/
|
|
│ │ │ ├── class-sitemap-module.php # Module entry
|
|
│ │ │ ├── class-sitemap-index.php # Sitemap index generator
|
|
│ │ │ ├── class-sitemap-posts.php # Post type sitemaps
|
|
│ │ │ ├── class-sitemap-taxonomies.php # Taxonomy sitemaps
|
|
│ │ │ ├── class-sitemap-images.php # Image sitemap
|
|
│ │ │ └── class-sitemap-xsl.php # XSL stylesheet for browser viewing
|
|
│ │ │
|
|
│ │ ├── redirects/
|
|
│ │ │ ├── class-redirects-module.php # Module entry
|
|
│ │ │ ├── class-redirect-manager.php # CRUD for redirects
|
|
│ │ │ ├── class-404-monitor.php # 404 logging + one-click redirect
|
|
│ │ │ ├── class-auto-redirect.php # Auto-redirect on slug change
|
|
│ │ │ └── views/
|
|
│ │ │ └── redirects-admin.php # Redirect management page
|
|
│ │ │
|
|
│ │ ├── analytics/
|
|
│ │ │ ├── class-analytics-module.php # Module entry
|
|
│ │ │ ├── class-ga-connector.php # Google Analytics (GA4)
|
|
│ │ │ ├── class-gtm-connector.php # Google Tag Manager
|
|
│ │ │ ├── class-pixel-manager.php # Facebook, TikTok, Pinterest pixels
|
|
│ │ │ └── class-script-manager.php # Custom header/footer scripts
|
|
│ │ │
|
|
│ │ ├── site-intelligence/
|
|
│ │ │ ├── class-intelligence-module.php # Module entry
|
|
│ │ │ ├── class-site-audit.php # Full site audit runner
|
|
│ │ │ ├── class-orphan-detector.php # Pages with no internal links
|
|
│ │ │ ├── class-thin-content.php # Below-threshold content
|
|
│ │ │ ├── class-empty-terms.php # Taxonomy terms with no content
|
|
│ │ │ ├── class-cannibalization.php # Keyword cannibalization detection
|
|
│ │ │ ├── class-duplicate-meta.php # Duplicate titles/descriptions
|
|
│ │ │ ├── class-cluster-detector.php # Auto-group existing content into clusters
|
|
│ │ │ ├── class-gap-analysis.php # [Connected] SAG gap analysis
|
|
│ │ │ ├── class-cluster-health.php # [Connected] Per-cluster scoring
|
|
│ │ │ └── views/
|
|
│ │ │ ├── dashboard.php # Site intelligence dashboard
|
|
│ │ │ └── audit-results.php # Detailed audit results page
|
|
│ │ │
|
|
│ │ ├── linking/
|
|
│ │ │ ├── class-linking-module.php # Module entry
|
|
│ │ │ ├── class-link-auditor.php # Internal link audit
|
|
│ │ │ ├── class-link-suggestions.php # Per-post link suggestions
|
|
│ │ │ ├── class-orphan-links.php # Orphan content list
|
|
│ │ │ ├── class-link-graph.php # Link equity distribution map
|
|
│ │ │ ├── class-auto-linker.php # [Connected] Automatic link insertion
|
|
│ │ │ ├── class-link-rules.php # [Connected] Keyword → URL link rules
|
|
│ │ │ └── views/
|
|
│ │ │ ├── link-audit.php # Link audit page
|
|
│ │ │ └── link-suggestions.php # Suggestions interface
|
|
│ │ │
|
|
│ │ ├── gsc/
|
|
│ │ │ ├── class-gsc-module.php # Module entry
|
|
│ │ │ ├── class-gsc-auth.php # Google OAuth flow
|
|
│ │ │ ├── class-gsc-dashboard.php # Search performance dashboard
|
|
│ │ │ ├── class-gsc-keywords.php # Keyword position tracking
|
|
│ │ │ ├── class-gsc-indexing.php # [Connected] Indexing API requests
|
|
│ │ │ ├── class-gsc-url-inspection.php # [Connected] URL inspection status
|
|
│ │ │ └── views/
|
|
│ │ │ ├── gsc-dashboard.php # GSC data display
|
|
│ │ │ └── gsc-connect.php # OAuth connection page
|
|
│ │ │
|
|
│ │ ├── socializer/
|
|
│ │ │ ├── class-socializer-module.php # Module entry
|
|
│ │ │ ├── class-share-buttons.php # Frontend share buttons (pure CSS/JS)
|
|
│ │ │ ├── class-social-profiles.php # Site-wide social links
|
|
│ │ │ ├── class-auto-poster.php # [Connected] Auto-post on publish
|
|
│ │ │ ├── class-twitter-api.php # [Connected] X/Twitter API
|
|
│ │ │ ├── class-facebook-api.php # [Connected] Facebook Pages API
|
|
│ │ │ ├── class-linkedin-api.php # [Connected] LinkedIn API
|
|
│ │ │ ├── class-og-image-generator.php # [Connected] Dynamic OG images
|
|
│ │ │ └── views/
|
|
│ │ │ ├── share-settings.php # Share button configuration
|
|
│ │ │ └── social-accounts.php # Connected accounts management
|
|
│ │ │
|
|
│ │ ├── smtp/
|
|
│ │ │ ├── class-smtp-module.php # Module entry
|
|
│ │ │ ├── class-smtp-mailer.php # Override wp_mail()
|
|
│ │ │ ├── class-email-log.php # Send log
|
|
│ │ │ └── class-email-test.php # Test email utility
|
|
│ │ │
|
|
│ │ ├── content-sync/ # [Connected only]
|
|
│ │ │ ├── class-sync-module.php # Module entry
|
|
│ │ │ ├── class-content-puller.php # Pull content from IGNY8 app
|
|
│ │ │ ├── class-content-mapper.php # Map IGNY8 content types → WP post types
|
|
│ │ │ ├── class-image-downloader.php # Download + attach AI images
|
|
│ │ │ ├── class-sync-queue.php # Sync job queue + status
|
|
│ │ │ ├── class-publish-scheduler.php # Scheduled publishing with review
|
|
│ │ │ └── views/
|
|
│ │ │ ├── sync-dashboard.php # Sync status + controls
|
|
│ │ │ └── content-review.php # Review queue before publish
|
|
│ │ │
|
|
│ │ └── sag/ # [Connected only]
|
|
│ │ ├── class-sag-module.php # Module entry
|
|
│ │ ├── class-blueprint-sync.php # Receive SAG blueprint from IGNY8 app
|
|
│ │ ├── class-taxonomy-builder.php # Create WP taxonomies from SAG attributes
|
|
│ │ ├── class-term-builder.php # Create taxonomy terms from attribute values
|
|
│ │ ├── class-cluster-manager.php # Cluster → hub page mapping
|
|
│ │ ├── class-structure-visualizer.php # Visual site structure map
|
|
│ │ └── views/
|
|
│ │ ├── sag-dashboard.php # SAG structure overview
|
|
│ │ ├── blueprint-review.php # Review blueprint before applying
|
|
│ │ └── structure-map.php # Visual cluster/taxonomy map
|
|
│ │
|
|
│ ├── admin/
|
|
│ │ ├── class-admin-menu.php # Admin menu registration
|
|
│ │ ├── class-dashboard.php # Main plugin dashboard
|
|
│ │ ├── class-setup-wizard.php # First-run setup wizard
|
|
│ │ ├── class-compatibility-notice.php # Notices for conflicting plugins
|
|
│ │ ├── views/
|
|
│ │ │ ├── dashboard.php # Main dashboard template
|
|
│ │ │ ├── wizard/
|
|
│ │ │ │ ├── step-1-site-type.php # Site type selection
|
|
│ │ │ │ ├── step-2-seo-import.php # Import from Yoast/RankMath
|
|
│ │ │ │ ├── step-3-basics.php # Site name, logo, org type
|
|
│ │ │ │ ├── step-4-social.php # Social profiles
|
|
│ │ │ │ ├── step-5-connect.php # IGNY8 API key (optional)
|
|
│ │ │ │ └── step-6-done.php # Summary + next steps
|
|
│ │ │ └── connect-prompt.php # "Connect to IGNY8" upsell card
|
|
│ │ └── assets/
|
|
│ │ ├── admin.css
|
|
│ │ ├── admin.js
|
|
│ │ ├── meta-box.css
|
|
│ │ └── meta-box.js
|
|
│ │
|
|
│ ├── frontend/
|
|
│ │ ├── class-head-output.php # All <head> tag output (meta, schema, OG)
|
|
│ │ ├── class-share-output.php # Share button HTML/CSS/JS
|
|
│ │ └── assets/
|
|
│ │ ├── share-buttons.css # Share button styles (<3KB)
|
|
│ │ └── share-buttons.js # Share button JS (<2KB)
|
|
│ │
|
|
│ ├── data/
|
|
│ │ ├── class-installer.php # Database table creation
|
|
│ │ ├── class-migrator.php # Version migration handler
|
|
│ │ └── class-importer.php # Import from Yoast/RankMath/AIOSEO
|
|
│ │
|
|
│ └── integrations/
|
|
│ ├── class-woocommerce.php # WooCommerce-specific SEO/schema
|
|
│ └── class-theme-bridge.php # Communication layer with companion theme
|
|
│
|
|
└── languages/
|
|
└── igny8.pot
|
|
```
|
|
|
|
---
|
|
|
|
## Part 4: Data Architecture
|
|
|
|
### 4.1 Custom Database Tables
|
|
|
|
```sql
|
|
-- Redirects
|
|
{prefix}igny8_redirects
|
|
id BIGINT AUTO_INCREMENT PRIMARY KEY
|
|
source_url VARCHAR(500) NOT NULL
|
|
target_url VARCHAR(500) NOT NULL
|
|
type SMALLINT DEFAULT 301 -- 301, 302, 307
|
|
hits INT DEFAULT 0
|
|
last_hit DATETIME NULL
|
|
created_at DATETIME NOT NULL
|
|
is_active TINYINT(1) DEFAULT 1
|
|
INDEX idx_source (source_url(191))
|
|
|
|
-- 404 Log
|
|
{prefix}igny8_404_log
|
|
id BIGINT AUTO_INCREMENT PRIMARY KEY
|
|
url VARCHAR(500) NOT NULL
|
|
referrer VARCHAR(500) NULL
|
|
user_agent VARCHAR(500) NULL
|
|
ip_hash VARCHAR(64) NULL -- Hashed for privacy
|
|
hits INT DEFAULT 1
|
|
first_hit DATETIME NOT NULL
|
|
last_hit DATETIME NOT NULL
|
|
is_resolved TINYINT(1) DEFAULT 0
|
|
redirect_id BIGINT NULL -- FK to redirects table
|
|
INDEX idx_url (url(191))
|
|
|
|
-- Internal Links Map
|
|
{prefix}igny8_link_map
|
|
id BIGINT AUTO_INCREMENT PRIMARY KEY
|
|
source_post_id BIGINT NOT NULL
|
|
target_post_id BIGINT NOT NULL
|
|
anchor_text VARCHAR(500) NULL
|
|
is_follow TINYINT(1) DEFAULT 1
|
|
link_position VARCHAR(20) NULL -- content, sidebar, footer
|
|
last_crawled DATETIME NOT NULL
|
|
INDEX idx_source (source_post_id)
|
|
INDEX idx_target (target_post_id)
|
|
|
|
-- Site Audit Results
|
|
{prefix}igny8_audit_results
|
|
id BIGINT AUTO_INCREMENT PRIMARY KEY
|
|
audit_type VARCHAR(50) NOT NULL -- orphan, thin, cannibalization, etc.
|
|
post_id BIGINT NULL
|
|
term_id BIGINT NULL
|
|
severity VARCHAR(20) NOT NULL -- critical, warning, info
|
|
message TEXT NOT NULL
|
|
data LONGTEXT NULL -- JSON extra data
|
|
audit_date DATETIME NOT NULL
|
|
is_resolved TINYINT(1) DEFAULT 0
|
|
INDEX idx_type_date (audit_type, audit_date)
|
|
|
|
-- Email Log (SMTP module)
|
|
{prefix}igny8_email_log
|
|
id BIGINT AUTO_INCREMENT PRIMARY KEY
|
|
to_email VARCHAR(320) NOT NULL
|
|
subject VARCHAR(500) NOT NULL
|
|
status VARCHAR(20) NOT NULL -- sent, failed
|
|
error_message TEXT NULL
|
|
sent_at DATETIME NOT NULL
|
|
|
|
-- Form Entries (if forms included — see note below)
|
|
-- Forms may move to theme plugin instead
|
|
|
|
-- Sync Queue (Connected mode)
|
|
{prefix}igny8_sync_queue
|
|
id BIGINT AUTO_INCREMENT PRIMARY KEY
|
|
igny8_content_id VARCHAR(100) NOT NULL
|
|
content_type VARCHAR(50) NOT NULL
|
|
sync_status VARCHAR(20) NOT NULL -- pending, synced, failed, review
|
|
wp_post_id BIGINT NULL
|
|
wp_term_id BIGINT NULL
|
|
data LONGTEXT NULL -- JSON payload from IGNY8
|
|
created_at DATETIME NOT NULL
|
|
synced_at DATETIME NULL
|
|
error_message TEXT NULL
|
|
INDEX idx_status (sync_status)
|
|
```
|
|
|
|
### 4.2 Post Meta Keys
|
|
|
|
All IGNY8 post meta keys use the `_igny8_` prefix:
|
|
|
|
```
|
|
_igny8_focus_keyword -- Primary focus keyword
|
|
_igny8_secondary_keywords -- JSON array of secondary keywords
|
|
_igny8_seo_title -- Custom SEO title (overrides template)
|
|
_igny8_meta_description -- Meta description
|
|
_igny8_canonical_url -- Canonical URL override
|
|
_igny8_robots_index -- 1 = index, 0 = noindex
|
|
_igny8_robots_follow -- 1 = follow, 0 = nofollow
|
|
_igny8_og_title -- OG title override
|
|
_igny8_og_description -- OG description override
|
|
_igny8_og_image -- OG image override (attachment ID)
|
|
_igny8_twitter_title -- Twitter card title override
|
|
_igny8_twitter_description -- Twitter card description override
|
|
_igny8_schema_type -- Schema type override (Article, HowTo, FAQ, etc.)
|
|
_igny8_schema_custom -- Custom JSON-LD (advanced)
|
|
_igny8_seo_score -- Last calculated SEO score (0-100)
|
|
_igny8_content_score -- Content quality score
|
|
_igny8_readability_score -- Readability score
|
|
_igny8_cluster_id -- [Connected] Mapped cluster ID
|
|
_igny8_related_links -- JSON array: [{post_id, anchor_text, priority}]
|
|
_igny8_link_suggestions -- JSON array of suggested internal links
|
|
_igny8_last_analysis -- Timestamp of last content analysis
|
|
_igny8_igny8_content_id -- [Connected] ID in IGNY8 platform
|
|
_igny8_sync_status -- [Connected] synced, pending, modified
|
|
```
|
|
|
|
### 4.3 Term Meta Keys
|
|
|
|
```
|
|
_igny8_term_seo_title -- SEO title for term archive
|
|
_igny8_term_meta_description -- Meta description for term archive
|
|
_igny8_term_robots_index -- index/noindex
|
|
_igny8_term_og_image -- OG image for term
|
|
_igny8_term_content -- Rich HTML content for term landing page
|
|
_igny8_term_cluster_id -- [Connected] Mapped cluster ID
|
|
_igny8_term_sag_attribute -- [Connected] SAG attribute this term belongs to
|
|
_igny8_term_sag_level -- [Connected] Primary, Secondary, Tertiary
|
|
_igny8_term_faq -- JSON array of FAQ items for term
|
|
_igny8_term_related_terms -- JSON array of related term IDs
|
|
_igny8_term_igny8_id -- [Connected] ID in IGNY8 platform
|
|
```
|
|
|
|
### 4.4 Options Keys
|
|
|
|
```
|
|
igny8_version -- Plugin version (for migrations)
|
|
igny8_active_modules -- JSON array of enabled module slugs
|
|
igny8_seo_settings -- JSON: title templates, separator, defaults
|
|
igny8_schema_settings -- JSON: org type, name, logo, knowledge graph
|
|
igny8_sitemap_settings -- JSON: included post types, taxonomies
|
|
igny8_social_profiles -- JSON: {facebook, twitter, linkedin, youtube, ...}
|
|
igny8_analytics_settings -- JSON: GA ID, GTM ID, pixel IDs
|
|
igny8_redirect_settings -- JSON: auto-redirect on slug change, etc.
|
|
igny8_smtp_settings -- JSON: host, port, user, pass, encryption
|
|
igny8_share_settings -- JSON: networks, position, style
|
|
igny8_linking_settings -- JSON: auto-link rules, max links per post
|
|
igny8_intelligence_settings -- JSON: audit schedule, thresholds
|
|
igny8_gsc_token -- Encrypted Google OAuth token
|
|
igny8_gsc_property -- Selected Search Console property
|
|
igny8_api_key -- [Connected] IGNY8 platform API key
|
|
igny8_api_connected -- [Connected] boolean
|
|
igny8_site_id -- [Connected] IGNY8 site ID
|
|
igny8_last_sync -- [Connected] last sync timestamp
|
|
igny8_sag_blueprint -- [Connected] JSON: full SAG structure cache
|
|
```
|
|
|
|
---
|
|
|
|
## Part 5: Theme ↔ Plugin Contract
|
|
|
|
The IGNY8 plugin communicates with the companion theme (and any theme) through a defined interface. The theme is never required — the plugin works with any theme. But the companion theme knows how to read IGNY8 data natively.
|
|
|
|
### 5.1 How Theme Reads Plugin Data
|
|
|
|
The plugin registers a public API class that the theme (or any theme) can use:
|
|
|
|
```php
|
|
// Theme checks if IGNY8 is active:
|
|
if (function_exists('igny8')) {
|
|
$seo_title = igny8()->seo->get_title($post_id);
|
|
$breadcrumbs = igny8()->seo->get_breadcrumbs();
|
|
$related_links = igny8()->linking->get_related_links($post_id);
|
|
$schema = igny8()->schema->get_json_ld($post_id);
|
|
$share_buttons = igny8()->socializer->render_share_buttons($post_id);
|
|
$term_content = igny8()->seo->get_term_content($term_id);
|
|
$cluster_nav = igny8()->linking->get_cluster_navigation($post_id);
|
|
}
|
|
```
|
|
|
|
### 5.2 What Theme Reads for Display
|
|
|
|
| Data | Source | Theme Usage |
|
|
|---|---|---|
|
|
| Related links | `_igny8_related_links` post meta | "Related Articles" section |
|
|
| Cluster navigation | Plugin API: cluster siblings | "More in this topic" sidebar/footer |
|
|
| Term landing page content | `_igny8_term_content` term meta | Term archive template hero section |
|
|
| Term FAQs | `_igny8_term_faq` term meta | FAQ accordion on term pages |
|
|
| Related terms | `_igny8_term_related_terms` term meta | "Related topics" block on term pages |
|
|
| Breadcrumbs | Plugin API or shortcode `[igny8_breadcrumbs]` | Breadcrumb display |
|
|
| Share buttons | Plugin API or shortcode `[igny8_share]` | Share button display |
|
|
| SAG attribute label | `_igny8_term_sag_attribute` term meta | Attribute-based navigation sections |
|
|
| SEO scores | `_igny8_seo_score` post meta | Optional score badge in admin |
|
|
|
|
### 5.3 REST API Endpoints (Plugin Provides)
|
|
|
|
For advanced theme features or AJAX interactions:
|
|
|
|
```
|
|
GET /wp-json/igny8/v1/related/{post_id} -- Related content for a post
|
|
GET /wp-json/igny8/v1/cluster/{cluster_id} -- All content in a cluster
|
|
GET /wp-json/igny8/v1/term/{term_id}/content -- Term landing page data
|
|
GET /wp-json/igny8/v1/structure/overview -- Site structure summary
|
|
POST /wp-json/igny8/v1/sync/trigger -- [Connected] Trigger sync
|
|
GET /wp-json/igny8/v1/audit/summary -- Site audit summary
|
|
```
|
|
|
|
---
|
|
|
|
## Part 6: SEO Import System
|
|
|
|
Critical for adoption. Users switching from Yoast or RankMath need a seamless migration.
|
|
|
|
### 6.1 Supported Imports
|
|
|
|
| Source Plugin | Data Imported |
|
|
|---|---|
|
|
| **Yoast SEO** | Focus keyword, SEO title, meta description, robots meta, canonical, OG settings, redirects (premium), XML sitemap settings |
|
|
| **RankMath** | Focus keywords (multiple), SEO title, meta description, robots, canonical, OG, schema type, redirects, 404 monitor data |
|
|
| **AIOSEO** | Title, description, robots, canonical, OG, schema |
|
|
|
|
### 6.2 Import Process
|
|
|
|
1. Plugin detects installed SEO plugins on activation
|
|
2. Setup wizard offers import in Step 2
|
|
3. Import runs in background (Celery-style via WP Cron for large sites)
|
|
4. Progress bar shows completion
|
|
5. After import, option to deactivate source plugin
|
|
6. All imported data stored in IGNY8's own meta keys (no dependency on source plugin data)
|
|
|
|
---
|
|
|
|
## Part 7: Setup Wizard
|
|
|
|
### Step 1: Site Type
|
|
Select site type for default schema and configuration:
|
|
- Blog / Content Site
|
|
- Business / Corporate
|
|
- eCommerce (WooCommerce)
|
|
- Local Business / Services
|
|
- SaaS / Software
|
|
- Portfolio / Agency
|
|
|
|
### Step 2: SEO Import
|
|
- Detects Yoast, RankMath, AIOSEO
|
|
- One-click import of all SEO data
|
|
- Shows count of posts/pages/terms to import
|
|
|
|
### Step 3: Site Basics
|
|
- Site name (for title tag template)
|
|
- Organization or Person (for schema)
|
|
- Logo upload (for schema)
|
|
- Default title separator
|
|
|
|
### Step 4: Social Profiles
|
|
- Facebook, X/Twitter, LinkedIn, YouTube, Instagram, Pinterest URLs
|
|
- Default social sharing image
|
|
|
|
### Step 5: Connect to IGNY8 (Optional)
|
|
- API key input field
|
|
- "Don't have an account? Sign up free" link
|
|
- Connection test + site pairing
|
|
- Skip option (clearly labeled, no pressure)
|
|
|
|
### Step 6: Done
|
|
- Summary of configuration
|
|
- "Run your first site audit" CTA
|
|
- Links to key settings pages
|
|
- Quick tips for getting started
|
|
|
|
---
|
|
|
|
## Part 8: Compatibility Layer
|
|
|
|
### 8.1 Conflicting Plugin Detection
|
|
|
|
On activation, detect and warn about:
|
|
- Yoast SEO (meta tags, sitemap conflict)
|
|
- RankMath (meta tags, sitemap, schema conflict)
|
|
- AIOSEO (meta tags conflict)
|
|
- XML Sitemap Generator (sitemap conflict)
|
|
- Schema plugins (duplicate schema)
|
|
- Redirection plugin (redirect conflict)
|
|
|
|
Show admin notice: "IGNY8 replaces [Plugin Name]. We can import your data and you can then deactivate it. [Import & Deactivate] [Dismiss]"
|
|
|
|
### 8.2 WooCommerce Integration
|
|
|
|
When WooCommerce is active:
|
|
- Product schema auto-generated from WooCommerce data
|
|
- Product category term meta available
|
|
- Product attribute taxonomies detected and included in SAG structure
|
|
- Shop/product archive pages get SEO meta box
|
|
- Product sitemap includes price, availability, images
|
|
|
|
### 8.3 Theme Bridge
|
|
|
|
When companion theme is active:
|
|
- Plugin detects `current_theme_supports('igny8')`
|
|
- Enables enhanced data passing (related links, cluster nav, term content)
|
|
- Disables features the theme handles natively (breadcrumb HTML, share button HTML)
|
|
- Plugin focuses on data + `<head>` output; theme handles visual display
|
|
|
|
When any other theme:
|
|
- Plugin handles all output itself (breadcrumbs via shortcode, share buttons via auto-insertion)
|
|
- All features work independently
|
|
- Less visually integrated but fully functional
|
|
|
|
---
|
|
|
|
## Part 9: Build Execution Plan
|
|
|
|
### Phase 1: Foundation (Days 1-3)
|
|
|
|
| Day | Task |
|
|
|---|---|
|
|
| 1 | Plugin skeleton: main file, module manager, admin menu, dashboard page |
|
|
| 1 | Module base class, activation/deactivation lifecycle, option storage |
|
|
| 2 | Setup wizard: 6-step flow, site type config, social profiles |
|
|
| 2 | Database installer: create all custom tables |
|
|
| 3 | REST API base: endpoint registration, authentication |
|
|
| 3 | Compatibility layer: detect conflicting plugins, admin notices |
|
|
|
|
### Phase 2: SEO Core (Days 4-7)
|
|
|
|
| Day | Task |
|
|
|---|---|
|
|
| 4 | SEO meta box: focus keyword, title, description, SERP preview |
|
|
| 4 | Title tag management: templates, separator, dynamic tokens |
|
|
| 5 | Meta tags output: description, robots, canonical in `<head>` |
|
|
| 5 | Content analysis: keyword density, heading check, readability scoring |
|
|
| 6 | OG + Twitter Card meta tags |
|
|
| 6 | Breadcrumbs: generation, shortcode, schema |
|
|
| 7 | Robots.txt manager, verification codes |
|
|
| 7 | SEO settings page: global defaults, title templates, noindex rules |
|
|
|
|
### Phase 3: Schema + Sitemap + Redirects (Days 8-10)
|
|
|
|
| Day | Task |
|
|
|---|---|
|
|
| 8 | Schema generator: Article, Organization, WebPage, BreadcrumbList, WebSite+SearchAction |
|
|
| 8 | Schema: FAQPage, HowTo, LocalBusiness, Service |
|
|
| 9 | Schema: Product (WooCommerce), custom schema field |
|
|
| 9 | XML sitemap: index, post type sitemaps, taxonomy sitemaps, image sitemap |
|
|
| 10 | Redirects: CRUD, 404 monitor, auto-redirect on slug change, CSV import/export |
|
|
|
|
### Phase 4: Site Intelligence (Days 11-13)
|
|
|
|
| Day | Task |
|
|
|---|---|
|
|
| 11 | Site audit runner: orchestrate all checks |
|
|
| 11 | Orphan detector, thin content scanner, empty terms checker |
|
|
| 12 | Cannibalization detection, duplicate meta finder |
|
|
| 12 | Cluster detector (auto-group existing content by topic similarity) |
|
|
| 13 | Intelligence dashboard: audit results, scores, charts |
|
|
| 13 | Scheduled re-audit via WP Cron |
|
|
|
|
### Phase 5: Internal Linking (Days 14-15)
|
|
|
|
| Day | Task |
|
|
|---|---|
|
|
| 14 | Link crawl: scan all content, build link map table |
|
|
| 14 | Link audit page: per-post counts, broken links, orphans |
|
|
| 15 | Link suggestions: analyze content and suggest internal links |
|
|
| 15 | Link graph visualization (simple table/chart, not full D3 graph) |
|
|
|
|
### Phase 6: Socializer + Analytics + SMTP (Days 16-18)
|
|
|
|
| Day | Task |
|
|
|---|---|
|
|
| 16 | Share buttons: pure CSS/JS, position options, network selection |
|
|
| 16 | Social profiles management |
|
|
| 17 | Analytics: GA4 connector, GTM, pixel manager, custom scripts |
|
|
| 17 | SMTP: mailer override, email log, test email |
|
|
| 18 | GSC: OAuth flow, dashboard, keyword tracking display |
|
|
|
|
### Phase 7: SEO Import (Days 19-20)
|
|
|
|
| Day | Task |
|
|
|---|---|
|
|
| 19 | Yoast importer: read all Yoast meta keys, map to IGNY8 keys |
|
|
| 19 | RankMath importer: read all RankMath meta keys, map to IGNY8 keys |
|
|
| 20 | AIOSEO importer |
|
|
| 20 | Import UI: progress bar, background processing, completion report |
|
|
|
|
### Phase 8: Connected Mode — Content Sync (Days 21-23)
|
|
|
|
| Day | Task |
|
|
|---|---|
|
|
| 21 | API client: authenticate with IGNY8 platform, connection management |
|
|
| 21 | Content puller: fetch content from IGNY8 API |
|
|
| 22 | Content mapper: map IGNY8 content types to WP post types, handle images |
|
|
| 22 | Sync queue: pending/synced/failed status, retry logic |
|
|
| 23 | Publish scheduler: review queue, scheduled publishing |
|
|
| 23 | Sync dashboard: status, controls, history |
|
|
|
|
### Phase 9: Connected Mode — SAG Structure (Days 24-27)
|
|
|
|
| Day | Task |
|
|
|---|---|
|
|
| 24 | Blueprint sync: receive SAG structure JSON from IGNY8 platform |
|
|
| 24 | Blueprint review UI: show proposed taxonomies/terms before applying |
|
|
| 25 | Taxonomy builder: create WordPress taxonomies from SAG attributes |
|
|
| 25 | Term builder: create terms from attribute values, set hierarchies |
|
|
| 26 | Cluster manager: map clusters to hub pages/terms |
|
|
| 26 | Term content sync: populate term descriptions and landing page content |
|
|
| 27 | Structure visualizer: visual map of clusters → taxonomies → content |
|
|
| 27 | Connected enhancements: multi-keyword scoring, cluster-aware analysis, auto-linker |
|
|
|
|
### Phase 10: Polish + Package (Days 28-30)
|
|
|
|
| Day | Task |
|
|
|---|---|
|
|
| 28 | Cross-module testing: all modules enabled/disabled combinations |
|
|
| 28 | Performance: ensure zero frontend impact when features aren't used |
|
|
| 29 | WordPress.org compliance: readme.txt, screenshots, FAQ |
|
|
| 29 | Internationalization audit: all strings translatable |
|
|
| 30 | Build script: generate release zip |
|
|
| 30 | Documentation: hooks, filters, developer guide |
|
|
|
|
---
|
|
|
|
## Part 10: Performance Rules
|
|
|
|
The plugin must be invisible in terms of frontend performance when features aren't actively outputting content.
|
|
|
|
| Rule | Implementation |
|
|
|---|---|
|
|
| Zero CSS on frontend unless share buttons are enabled | Conditional enqueue only |
|
|
| Zero JS on frontend unless share buttons or dynamic features are used | Conditional enqueue |
|
|
| All `<head>` output in a single hook at priority 1 | No scattered wp_head hooks |
|
|
| Schema output as single JSON-LD block | Not multiple schema blocks |
|
|
| Admin assets only on IGNY8 admin pages | Screen check before enqueue |
|
|
| Meta box assets only on post editor screens | Screen check before enqueue |
|
|
| Site audit runs via WP Cron, never on page load | Background processing |
|
|
| Link crawl is background process, never blocks requests | WP Cron scheduled |
|
|
| All option reads use object cache when available | wp_cache_get/set |
|
|
| Connected mode API calls are async, never block page load | WP Cron + queue |
|
|
|
|
---
|
|
|
|
## Part 11: WordPress.org Submission Requirements
|
|
|
|
For free distribution on WordPress.org repo:
|
|
|
|
- GPL v2+ license
|
|
- No phone-home without user consent
|
|
- No premium upsell in admin notices (only on dedicated settings page)
|
|
- All assets (CSS, JS, images) included — no external CDN
|
|
- No minified-only JS/CSS — source files must be readable
|
|
- Proper text domain and i18n
|
|
- Sanitize all inputs, escape all outputs
|
|
- Use WordPress APIs (no direct SQL without $wpdb)
|
|
- No tracking without opt-in
|
|
- readme.txt with proper headers, FAQ, changelog, screenshots
|
|
|
|
---
|
|
|
|
*End of IGNY8 Plugin Build Plan*
|