38 KiB
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:
- 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.
- 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
-- 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:
// 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
- Plugin detects installed SEO plugins on activation
- Setup wizard offers import in Step 2
- Import runs in background (Celery-style via WP Cron for large sites)
- Progress bar shows completion
- After import, option to deactivate source plugin
- 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