The modern, all-in-one SEO plugin for WordPress built with REACT
SEOPulse is a complete WordPress SEO solution that helps you optimize your content, manage your metadata, generate sitemaps, handle redirections, and improve your local search visibility — all from a single, modular plugin.
✔
Real-time content analysis with SEO scoring (0–100) and actionable recommendations
✔
Up to 5 focus keywords per post with per-keyword scoring
✔
Open Graph, Twitter Card & LinkedIn live social previews directly in the editor
✔
Meta Template Engine with 99+ dynamic variables for titles and descriptions
✔
XML sitemaps: posts, pages, taxonomies, images, and Google News
✔
301/302 URL redirections with 404 monitoring
✔
Local Business JSON-LD schema with interactive map
✔
GDPR-compliant Google Analytics 4, Google Tag Manager & cookie consent banner
✔
Migrate from Yoast SEO, Rank Math & SEOPress in one click
✔
No ads, fully modular — disable what you don't need
Why choose SEOPulse?
- All in one: No need for separate plugins for sitemaps, redirects, schemas, or analytics. SEOPulse bundles everything. Disable unused modules with one click.
- Easy AND powerful: The setup wizard guides you through initial configuration. Advanced users get access to 99+ template variables, REST API endpoints and WP-CLI commands.
- Modern architecture: Built on React and PHP 8.O with a modular design, SEOPulse is fast, extensible, and developer-friendly.
- Migrate easily: Import your focus keywords, meta tags, and Open Graph data from Yoast SEO, Rank Math, SEOPress or All In One SEO in a single click.
Features
- Installation wizard to quickly setup your site
- Content analysis with up to 5 focus keywords per post and real-time SEO scoring (0–100)
- 18+ content checks: title structure, heading hierarchy, word count, keyword density, links, images, alt text
- Readability analysis: Flesch Reading Ease, sentence length, passive voice, complex words, transition words
- Mobile / Desktop Google Preview to see how your post appears in search results
- Facebook, Twitter & LinkedIn social previews directly in the editor sidebar
- SEO titles & meta descriptions with dynamic variables (post title, author, date, custom fields…)
- Meta Template Engine: 16 namespaces, 99+ variables, conditional rendering, fallback chains
- Open Graph & Twitter Cards for better social sharing on Facebook, LinkedIn, Twitter, WhatsApp…
- Custom canonical URL and robots directives (noindex, nofollow, noarchive)
- XML Sitemaps: posts, pages, custom post types, taxonomies, images
- Google News Sitemap with multilingual support (WPML, Polylang, TranslatePress)
- robots.txt management with auto-insertion of sitemap URL
- 301/302 URL redirections with exact matching, hit counter, and chain detection
- 404 monitoring: automatic logging with referrer, user agent, deduplication, and bot filtering (up to 100 entries)
- Redirect suggestions for 404 URLs
- CSV export for redirects and 404 logs
- Local Business SEO: single-location JSON-LD schema with address, opening hours, phone, email, social profiles, business identity, logo, ratings, and pricing
- JSON-LD schema: Organization, WebSite, Article, FAQ, HowTo, Product (WooCommerce)
- JSON-LD validator with browser preview
- Google Analytics 4 (GA4) with Consent Mode v2 and GDPR compliance
- Google Tag Manager (GTM) with consent-aware script injection
- GDPR cookie consent banner: customizable position, theme, message, and button text
- Instant indexing: IndexNow protocol and Google Indexing API with submission log
- Google Suggest integration for keyword research in the editor
- WooCommerce support: Product schema auto-injection, meta template variables (price, SKU, rating…)
- SEO columns in post/page lists: sortable score, title, description, focus keywords with color-coded badges
- Admin bar SEO score for quick reference
- Image ALT auto-fill and image diagnostics
- HTML Head cleanup: remove generator tag, emoji scripts, WLW manifest, shortlinks, RSD links
- Freeze Modified Date to preserve SEO history on post edits
- Import/Export settings in JSON format and one-click plugin reset
- Migrate from Yoast SEO, Rank Math, SEOPress and All In One SEO
- WP-CLI commands: analyze, dashboard, migrate, export, import
- Full REST API for all major features
- Multisite compatible
- Multilingual ready: WPML, Polylang, TranslatePress
All Features Included
SEOPulse ships with every feature unlocked — no upsells, no limits:
- Unlimited focus keywords per post
- Unlimited redirections with regex pattern support and capture groups
- CSV redirect import/export for bulk redirect management
- Extended Local SEO fields: fax, GPS coordinates, price range, aggregate rating, area served, founding date, number of employees, payment methods, slogan, currencies accepted…
- 6 Gutenberg blocks with auto-injected structured data: FAQ (FAQPage schema), HowTo (HowTo schema), Table of Contents (auto-generated), Schema (custom JSON-LD), Review (ratings), Product Grid (WooCommerce)
WooCommerce SEO
SEOPulse integrates with WooCommerce out of the box:
- Automatic Product JSON-LD schema (name, price, availability, SKU, ratings, brand, images)
- WooCommerce variables in the Meta Template Engine (price, SKU, rating, stock…)
- Product Grid Gutenberg block with search, filter, and sort
- Freeze Modified Date to preserve SEO history on product edits
- Enhanced product schema, breadcrumb customization, and category SEO optimization
Developers will love SEOPulse!
- Modular architecture with 8 toggleable modules
- Full REST API under
/wp-json/seopulse/v1/ for every feature
- WP-CLI commands for batch operations (analyze, migrate, export, import)
- Hooks and filters for extensibility (
seopulse_container_built, seopulse_modules_definition…)
- Modern PHP 8.1 codebase with PSR-4 autoloading
- Upload 'seopulse' to the '/wp-content/plugins/' directory
- Activate the plugin through the 'Plugins' menu in WordPress
- Click on SEOPulse in the admin menu and follow the setup wizard
Requirements: WordPress 6.0+ and PHP 8.1+
Source Code Repository
The full source code (including all uncompiled JavaScript, TypeScript, and SCSS source files) is publicly available at:
https://github.com/wp-seopulse/seopulse-public
See the "Source Code & Build Instructions" section below for details on how to compile the assets yourself.
1.5.0
- NEW: Admin Page Header — Notification panel items now have a "Dismiss" button; dismissed notifications are stored per user and filtered out of the
GET /notifications REST response, plus a new POST /notifications/dismiss route to record the dismissal
- PERFORMANCE: Admin steelsheet now loads only when the module is enabled
- FIX: Admin Page Header — Notification IDs for disabled modules are now sanitized consistently between generation and dismissal, preventing dismissed notifications from reappearing when a module key contains uppercase or special characters
- FIX: Dashboard — Toggling a module's enabled state no longer requires a full page reload to update the notification panel and its badge counter; the header bundle now re-fetches notifications after a module toggle via a cross-bundle refresh event
- FIX: Editor Sidebar — Meta Title/Description character counter and SEO score/Meta Checks warnings now use the resolved value of dynamic variables (
%%post.title%%, %%post.excerpt%%, including combinations with static text) instead of the literal template string length
- FIX: Admin Columns — Posts list "SEO" column now displays the resolved post title/description instead of the raw
%%post.title%% / %%post.excerpt%% template syntax
- FIX: Admin Columns — Score badge colors on the posts list
edit.php screen were not applied because the design-token stylesheet defining --sp-success-subtle/--sp-warning-text/--sp-error-* custom properties was not enqueued outside SEOPulse admin pages
- FIX: Module Page — Disabled state now renders correctly when the module is disabled
- FIX: Module Page — Module toggles now correctly redirect to the dedicated module admin page
1.4.0
- NEW: Sitemap Robots.txt — "Load current robots.txt" button in the Robots.txt View tab fetches and populates the textarea with the current robots.txt content (physical file if present, otherwise SEOPulse-generated)
- PERFORMANCE: General — Graphical improvements
- PERFORMANCE: React codebase
- FIX: Sitemap Settings — "View Sitemap" link in Tools & Diagnostics tab now correctly switches between
wp-sitemap.xml (native) and sitemap.xml (custom) based on the "Disable native WordPress sitemap" checkbox state
- FIX: Sitemap Robots.txt —
generate_robots_txt() now uses custom_robots as the full verbatim content when set, preventing duplicate base headers after a load-edit-save cycle
- FIX: Meta Engine —
%%author.name%% and all author.* variables now resolve correctly when context is built from a post_id alone (e.g. headless API, editor sidebar preview); author is now auto-derived from the post's post_author field in ContextBag::fromArray()
- FIX: Meta Engine — Admin template live preview no longer resolves all contextual variables to empty;
resolve_template endpoint now builds a sample context from the most recently modified published post when no explicit context is provided
- FIX: Editor sidebar — Modal now correctly loads the CSS
- FIX: Editor Sidebar — Snippet preview (Search tab) now displays the actual resolved post title and description instead of raw
%%post.title%% / %%post.excerpt%% template strings
- FIX: Editor Sidebar — Social preview (Social tab) now displays the actual resolved OG/Twitter title and description instead of raw template strings;
resolved values from the REST API are now used with a field-level fallback chain matching the PHP defaults
1.3.0
- NEW: Analytics & Cookie Consent — Add settings page to configure the Google Analytics 4 and Google Tag Manager tracking scripts.
- NEW: Add an Header React component to all React SPAs.
- PERFORMANCE: CSS files to reduce the output size.
- PERFORMANCE: Rework all React SPAs.
- FIX: Local SEO —
numberOfEmployees field reverted to 0 on page reload; API response returns a QuantitativeValue object which is now properly normalized to a plain string on load.
- FIX: Local SEO —
areaServed region and country fields reverted to empty on page reload; PHP now stores region as AdministrativeArea and country as Country (distinct Schema.org types), allowing the frontend to reliably distinguish them on load.
1.2.1
- FIX: Dashboard blank — React SPA mount errors are now surfaced via an ErrorBoundary instead of silently leaving
#seopulse-dashboard-root empty
- FIX: Dashboard blank — silent bail conditions in the entry point now log explicit
console.error messages (#seopulse-dashboard-root not found, window.seopulseDashboard undefined, createRoot unavailable)
- FIX: Dashboard blank — added runtime guard for
createRoot availability
- FIX:
DashboardHeader — unsafe non-null assertion window.seopulseDashboard! replaced with optional chaining to prevent TypeError crashing the full render tree
1.2.0
- NEW: Dashboard fully migrated from PHP to React
- NEW: SEO Overview dashboard widget fully migrated from PHP to React with live data fetch via REST API
- NEW: Monitor404 —
sendTest() method in Monitor404EmailReporter to send a test email bypassing the enabled/schedule guards
- NEW: Monitor404 — test email now captures
wp_mail_failed hook and surfaces the PHPMailer/SMTP error message in the REST response
- NEW: "See all" expand/collapse toggle on the Recent Analyses dashboard widget
- PERFORMANCE: General CSS cleanup
- FIX: Monitor404 Settings — after saving, the React state and
window.seopulse404Monitor.settings were not updated, requiring a full page reload to reflect changes
- FIX: Editor sidebar — ScoreGauge SVG circles now enforced via CSS to prevent Gutenberg resets from making them opaque
- FIX: Editor sidebar — ScoreGauge render the score text above the SVG
- FIX: Editor sidebar — ScoreGauge color variant selectors now use higher specificity to resist WordPress/Gutenberg overrides
- FIX: Score level vocabulary mismatch — PHP now returns
needs_improvement to align with TypeScript components
- FIX: Open Graph and Twitter Card global settings were saved correctly but never applied to frontend meta tags
- FIX: Third-party admin notices (e.g. Elementor, WooCommerce) no longer appear on SEOPulse plugin pages
- FIX: French translations not displayed on Meta SEO, Local SEO, Redirections, Sitemap and Log Viewer pages —
wp_set_script_translations() was missing for the corresponding script handles
1.1.0
- NEW: "See all" expand/collapse toggle on the Quick Wins dashboard widget
- NEW: "See all" expand/collapse toggle on the Images to Fix dashboard widget
- NEW: Command palette (Ctrl+K) in admin bar
- NEW: SEO score in admin bar
- NEW: Modules Panel block is now draggable to left or right columns in the dashboard grid
- PERFORMANCE: SEO Health Status dashboard widget: score sparkline is now animated
- PERFORMANCE: SEO Health Status dashboard widget: KPI badge now shows the live score
- PERFORMANCE: Recent Analyses dashboard Widget
- FIX: Fatal error on Setup Wizard
1.0.1
Tested up to WordPress 7.0
1.0.0
Initial release.