A WordPress SEO plugin by WordPressistic: on-page analysis and scoring, schema/structured data, XML sitemaps, robots and canonical control, redirects with a 404 monitor, image SEO, fast/instant search-engine indexing (Google Indexing API + IndexNow, branded Indexistic), and AI-assisted content optimization using a provider of your choice (OpenRouter, Groq, or your own self-hosted Ollama) — with a genuinely useful free tier.
Marketing site: seoistic.wpistic.com · Account & license management: app.wpistic.com
- On-page SEO analysis — a deterministic, versioned 0–100 score per post (title, meta description, focus keyword placement, heading structure, internal links, image alt text, content length, Open Graph image), with a live status indicator while you edit.
- Search appearance previews — Google desktop/mobile and social-share previews that update as you type.
- Schema / structured data — Organization, WebSite, and per-page JSON-LD, validated against schema.org's required/recommended properties for the type you choose.
- XML sitemaps, robots.txt, canonical URLs, breadcrumbs, llms.txt.
- Redirects & 404 monitor, with CSV import/export.
- Fast indexing (Indexistic) — submit published/updated URLs to Google's Indexing API and the free IndexNow protocol (Bing, Yandex, Seznam, Naver), automatically on publish (opt-in) or from a bulk console.
- Content Health — orphan-page detection and content-decay flagging, both linking straight to the editor rather than auto-applying anything.
- AI-assisted optimization — generate/improve SEO titles, meta descriptions, focus keywords, schema type, image alt text, internal-link suggestions, and full-page optimization, using your own API key with OpenRouter or Groq, or a self-hosted Ollama server. Every suggestion is previewed before/after and requires an explicit Apply — nothing is written or published silently.
- A command palette (Ctrl/Cmd+K) to jump to any screen or search your content by title/score.
- Importers for Yoast SEO, Rank Math, and AIOSEO metadata.
Everything above except the items below ships in the free tier: unlimited sites, full on-page analysis and scoring, schema, sitemaps, redirects, image SEO, WooCommerce SEO, local SEO, and the Yoast/Rank Math/AIOSEO importers.
AI-assisted generation (bring your own OpenRouter/Groq/Ollama key or endpoint), Schema Pro (custom schema builder), Core Web Vitals monitoring, AI search-visibility / AEO reporting, a keyword rank tracker, a read-only Google Search Console dashboard, and the WPistic Business Automator integration. See seoistic.wpistic.com/#pricing for current plans — pricing is kept up to date there, not duplicated here.
Add screenshots to this section (e.g. assets/screenshot-1.png …) covering
the dashboard, the post-editor SEO workspace, and the license/pricing
screens. Not included in this release — see the release report for details.
- Download
seoistic-{version}.zipfrom the Releases page (or build it yourself — see "For developers" below). - In your WordPress admin: Plugins → Add New → Upload Plugin, choose the ZIP, then Install Now.
- Click Activate.
- A new SEOistic item appears in the left-hand admin menu.
No Composer install, no npm run build, and no additional server
requirements beyond what's listed under Requirements — the ZIP is ready to
run as-is.
- Open SEOistic → Dashboard. Click Run Site Audit to score your existing published content — the score is always calculated from real on-page checks; nothing is estimated or invented.
- Open SEOistic → Settings to set your title separator, confirm XML
sitemaps and
llms.txtare enabled, and (optionally) set a default social-share image. - If you have a license key, open SEOistic → License to activate it — see "License activation" below.
- To use AI-assisted generation, open SEOistic → Settings → AI, pick a provider, and add your own API key (not needed for a self-hosted Ollama server).
SEOistic → Dashboard → Run Site Audit scores every published post/page in small batches (so it never times out on a large site) and refreshes the dashboard's health score, the optimization roadmap, and every post's SEO score. You can also audit a single post from its own SEO workspace ("Run Audit" in the Audit tab), or filter SEOistic → Content by score band or issue type afterward.
Every public post type gets an SEOistic — SEO panel on its edit screen: SEO title, meta description, focus keyword, canonical URL, robots (noindex/nofollow), Open Graph title/description/image, schema type, and a breadcrumb-title override. The live score and a prioritized list of fixes update as you type — no need to save and reload to see the effect of a change.
SEOistic → License. Enter your license key and click Activate License — that's the entire form; there's nothing else to configure. The plugin validates your key against the WPistic licensing service, unlocks the premium addons your plan includes, and re-validates automatically in the background (see "External services" below for exactly what's sent). Once active, the page shows your plan, expiry, and a masked version of your key — the full key is never displayed again after activation. Use Deactivate License to release this site's activation (e.g. before moving the license to another site).
Don't have a key yet, or need to manage an existing one? See "Account dashboard" below.
Manage your subscription, licenses, and billing at app.wpistic.com. The License and Upgrade screens inside SEOistic both link there directly.
Current plans and pricing live at seoistic.wpistic.com/#pricing — every "Upgrade" button inside the plugin links there. We keep pricing on the website rather than hardcoded in the plugin so it's never stale.
- WordPress 6.4+
- PHP 8.1+
- MySQL/MariaDB with a standard WordPress
wpdbconnection (used for the Redirects/404-monitor tables)
Tested with the Block Editor (Gutenberg) and the Classic Editor. Works alongside WooCommerce (adds product-specific SEO fields when WooCommerce is active) but doesn't require it. No known conflicts with common caching or security plugins — SEOistic's own admin assets are scoped and only load on its own screens and the post-edit screen, never site-wide.
SEOistic doesn't send any data anywhere by default beyond what's required to validate your license once you activate one. AI generation, Google Indexing/Search Console, and the Business Automator integration are all opt-in — each requires you to explicitly connect a provider/account first, and none of them run automatically until you do. See "External services" for the full, code-verified list of what's contacted and when.
| Service | When contacted | Data sent |
|---|---|---|
WPistic licensing (wpistic.com) |
License activation/deactivation, and a daily background check while a license is active | Site URL, a generated installation ID, your license key, and the installed plugin version |
| Google (OAuth, Indexing API, Search Console API) | Only if you connect the Indexistic Google integration or the Search Console addon | Your own Google Cloud credentials; the Indexing API receives the URL you publish; Search Console reads (never writes) your existing Analytics/Inspection data |
IndexNow (api.indexnow.org) / Bing |
On publish, only if the relevant free addon is enabled | The published URL / your sitemap URL |
| Groq / OpenRouter | Only when you click an AI action, and only if you selected that provider | The page title, a content excerpt, and site context, as part of the generation prompt |
| Your own Ollama server | Same as above, if you selected Ollama | Same — stays entirely on infrastructure you control |
| Your own Business Automator instance | Only if you connect the addon | An API token you generate on your own instance |
Full trigger-by-trigger detail (with file references) is in
docs/release-audit.md in the source repository.
Found a security issue? Please report it privately rather than opening a public GitHub issue — email security@wordpressistic.com with details and, if possible, steps to reproduce. We'll acknowledge receipt and keep you updated as we investigate and fix it.
- Documentation and account management: app.wpistic.com
- General questions: wordpressistic.com
- Bugs and feature requests: open a GitHub issue on this repository
See CHANGELOG.md.
GPL-2.0-or-later — see LICENSE.
Built by WordPressistic.
This repository is the plugin — clone or symlink it directly into
wp-content/plugins/seoistic. There is no build step and no Composer
install required at runtime.
wp-content/plugins/seoistic/ <- this repo
├── seoistic.php # plugin bootstrap (headers, constants, autoloader)
├── src/ # PSR-4, namespace Wpistic\Seoistic\
├── lib/seo-core/ # framework-agnostic SEO domain library, namespace Wpistic\SeoCore\
├── assets/ # admin CSS/JS (vanilla, no build step)
├── knowledge/ # markdown guidance files that ground every AI prompt
└── docs/ # architecture notes, audits, and planning docs
src/autoload.php maps two PSR-4 prefixes with no Composer involved —
Wpistic\Seoistic\* → src/*, and Wpistic\SeoCore\* (a framework-agnostic
domain library: meta tags, the JSON-LD schema graph, redirect rules, the
pre-publish Auditor — zero WordPress function calls, independently
unit-tested) → lib/seo-core/src/*. lib/seo-core/composer.json exists
only so that sub-package can also be tested/consumed standalone; the plugin
itself needs nothing installed to run.
- Core SEO engine — always on, free, never gated:
Core\Meta,Core\Schema,Core\Sitemaps,Core\Robots,Core\Breadcrumbs,Core\LlmsTxt,Core\ScoreRecalculator,Core\ScheduledAudit. License\License— the entitlement bridge, registered before modules boot soModule\Entitlementhas fresh data.Module\ModuleRegistry— discovers and boots the toggleable addons (src/Addon/*Module.php), each gated byModule\Entitlement::can($id, $tier).- Admin-only:
Admin\Admin(dashboard/addons/pricing/settings),Admin\SeoColumns,Admin\SeoMetabox,Admin\AiSettingsPage,Admin\AiToolsPage,Admin\AutomationSettingsPage,Admin\ContentHealthPage,Admin\ContentInventoryPage. AI\RestController— registers theseoistic/v1REST namespace on every request (REST requests aren'tis_admin()).
All per-post SEO data reads and writes go through Core\PostSeo — the
single source of truth for the _seoistic_* meta keys, with transparent
fallback to pre-1.1.0 keys on read so upgrading sites never lose data.
- Every form:
wp_nonce_field()+check_admin_referer()on the handler. - Every REST route: a real
permission_callback(never__return_true); post-scoped routes also checkcurrent_user_can('edit_post', $post_id). - Sanitize on the way in, escape on the way out.
- Secrets (AI provider keys, the license key, OAuth tokens, the Business
Automator API token) are encrypted at rest via
Core\Cryptoand never echoed back in full — seedocs/release-audit.md. - No file writes without an explicit user action + confirmation;
.htaccesswrites always back up first.
- Clone/symlink this repo as
wp-content/plugins/seoisticin a local WordPress install. - Activate SEOistic from Plugins.
- Use the
seoistic/entitlementorseoistic/license_validfilters to unlock premium addons locally without a real license.
# Lint
find . -name "*.php" -not -path "./lib/seo-core/vendor/*" -exec php -l {} \;
find assets/js -name "*.js" -exec node --check {} \;
# Test the standalone domain library
cd lib/seo-core && composer install && vendor/bin/phpunitbash bin/build-release.shProduces build/packages/seoistic-{version}.zip and a matching
.sha256 checksum — see docs/implementation-plan.md and the script
itself for exactly what it does and excludes.
docs/ui-architecture.md,docs/design-system.md— the admin UI systemdocs/rest-api-contracts.md— everyseoistic/v1REST routedocs/release-audit.md— the pre-release security/quality auditdocs/distribution-model.md— the licensing/GPL distribution decisiondocs/test-plan.md— what's tested and howdocs/feature-status.md— what's connected vs. planned, per feature