Overview
GEO AI is built as a modern WordPress plugin using object-oriented PHP with a focus on modularity, extensibility, and WordPress coding standards. The plugin uses a singleton pattern for core classes and namespaces to organize functionality.Core Architecture
Plugin Structure
Namespace Organization
GEO AI uses PHP namespaces to organize code:GeoAI\- Root namespaceGeoAI\Admin\- Admin interface classesGeoAI\REST\- REST API endpointsGeoAI\Core\- Core functionality classesGeoAI\Traits\- Reusable traitsGeoAI\Analyzers\- Content analysis classes
Main Plugin Class
The main plugin classGeoAI_Plugin uses a singleton pattern and handles initialization:
geo-ai.php
Plugin Constants
Defined ingeo-ai.php:26-30:
Core Components
Admin Interface (GeoAI_Admin)
Handles all admin-side functionality:
- Settings pages with tabbed interface
- Meta boxes for post editing
- Asset enqueuing (CSS/JS)
- AJAX handlers
- Bulk editor interface
includes/class-geoai-admin.php
Key Methods:
add_admin_menu()- Registers admin menu pagesregister_settings()- Registers plugin optionsenqueue_admin_assets()- Loads admin scripts/stylesenqueue_editor_assets()- Loads Gutenberg editor assets
REST API (GeoAI_REST)
Provides REST API endpoints for editor integration:
Location: includes/class-geoai-rest.php
Endpoints:
AI Analyzer (GeoAI_Analyzer)
Handles content analysis using Google Gemini API:
Location: includes/class-geoai-analyzer.php
Key Features:
- Google Gemini API integration
- 4-dimensional scoring (Answerability, Structure, Trust, Technical)
- Automatic audit on post save (optional)
- Background processing via Action Scheduler
- Meta content generation (titles/descriptions)
Schema Output (GeoAI_Schema)
Generates structured data (JSON-LD):
Location: includes/class-geoai-schema.php
Supported Schema Types:
- Article
- WebSite (with SearchAction)
- Organization
- FAQPage (planned)
- HowTo (planned)
Compatibility Layer (GeoAI_Compat)
Detects and handles conflicts with other SEO plugins:
Location: includes/class-geoai-compat.php
Detected Plugins:
- Yoast SEO
- Rank Math
- SEOPress
- All in One SEO Pack
Other Core Classes
| Class | Purpose | Location |
|---|---|---|
GeoAI_Meta | Meta tags (title, description) | includes/class-geoai-meta.php |
GeoAI_Social | OpenGraph/Twitter Cards | includes/class-geoai-social.php |
GeoAI_Sitemaps | XML sitemap generation | includes/class-geoai-sitemaps.php |
GeoAI_Breadcrumbs | Breadcrumb navigation | includes/class-geoai-breadcrumbs.php |
GeoAI_Redirects | 301/302 redirect manager | includes/class-geoai-redirects.php |
GeoAI_404 | 404 error logging | includes/class-geoai-404.php |
Primary_Category | Primary category selection | includes/class-primary-category.php |
Traits
Encryption Trait
Location:includes/traits/trait-encryption.php
Provides secure encryption for sensitive data (API keys):
- Uses
libsodiumwhen available (PHP 7.2+) - Fallback to XOR encryption for older systems
- Automatic key generation and storage
Analyzer Classes
Location:includes/analyzers/
| Analyzer | Purpose |
|---|---|
Keyword_Analyzer | Focus keyword optimization analysis |
Readability_Analyzer | Content readability scoring |
SEO_Dashboard | Dashboard metrics aggregation |
Internal_Linking | Internal link suggestions |
Content_Insights | Content quality insights |
Activation & Deactivation
Activation Hook
Location:geo-ai.php:152-166
Deactivation Hook
Database Schema
404 Log Table
Table:{$wpdb->prefix}geoai_404_log
Post Meta Fields
| Meta Key | Type | Description |
|---|---|---|
_geoai_audit | JSON string | Audit results from AI analysis |
_geoai_audit_timestamp | MySQL datetime | Last audit run timestamp |
_geoai_title | string | Custom SEO title |
_geoai_meta_desc | string | Custom meta description |
_geoai_focus_keyword | string | Focus keyword |
_geoai_robots | string | Robots meta directives |
_geoai_canonical | URL | Custom canonical URL |
Plugin Options
Option Group:geoai_settings
All options are stored in wp_options table:
geoai_api_key- Google Gemini API keygeoai_autorun_on_save- Boolean for auto-auditgeoai_compat_mode- Compatibility mode (standalone/coexist)geoai_titles_templates- Array of title templatesgeoai_social_defaults- OpenGraph/Twitter defaultsgeoai_schema_defaults- Schema type enablementgeoai_sitemaps- Sitemap configurationgeoai_crawler_prefs- AI crawler blocking preferencesgeoai_redirects- Redirect rules arraygeoai_404_settings- 404 logging configurationgeoai_roles_caps- Role capabilitiesgeoai_debug_mode- Debug mode toggle
Design Patterns
Singleton Pattern
All core classes use singleton pattern to ensure single instance:Hook-Based Architecture
The plugin exposes numerous action hooks for extensibility:Filter-Based Customization
Filters allow modification of output and behavior:Dependencies
PHP Dependencies
- WordPress: 6.2+
- PHP: 8.1+
- Optional: libsodium (for encryption)
- Optional: Action Scheduler (bundled in
vendor/)
JavaScript Dependencies
Defined inpackage.json:
Security Measures
Nonce Verification
All forms and AJAX requests use WordPress nonces:Capability Checks
Data Sanitization
All user input is sanitized:API Key Storage
API keys are encrypted using libsodium or fallback encryption.Performance Optimization
Lazy Loading
Components are only initialized when needed.Transient Caching
Audit results and schema data can be cached using WordPress transients.Background Processing
Heavy operations use Action Scheduler for async processing:Next Steps
Gutenberg Blocks
Learn how to develop custom blocks for GEO AI
REST API
Explore the REST API endpoints
Extending
Extend GEO AI with hooks and filters
Contributing
Contribute to the project