﻿=== SEOPulse - Complete SEO Toolkit ===
Authors: citrusdevlab
Contributors: citrusdevlab, Alexandre Jacquin
Donate link: https://www.seopulse.citrus-design.fr
Tags: seo, xml sitemap, schema, redirections, local business
Requires at least: 6.0
Tested up to: 6.9
Stable tag: 1.0.0
Requires PHP: 8.1
License: GPLv3 or later
License URI: https://www.gnu.org/licenses/gpl-3.0.html

SEOPulse boosts WordPress SEO with real-time analysis, Local Business schema, Google News, sitemaps & GDPR analytics.

== Description ==

<h3>The modern, all-in-one SEO plugin for WordPress</h3>

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.

✔ <strong>Real-time content analysis with SEO scoring (0–100) and actionable recommendations</strong>
✔ <strong>Up to unlimited focus keywords per post with per-keyword scoring</strong>
✔ <strong>Open Graph, Twitter Card & LinkedIn live social previews directly in the editor</strong>
✔ <strong>Meta Template Engine with 99+ dynamic variables for titles and descriptions</strong>
✔ <strong>XML sitemaps: posts, pages, taxonomies, images, and Google News</strong>
✔ <strong>301/302 URL redirections with 404 monitoring</strong>
✔ <strong>Local Business JSON-LD schema</strong>
✔ <strong>GDPR-compliant Google Analytics 4, Google Tag Manager & cookie consent banner</strong>
✔ <strong>Migrate from Yoast SEO, Rank Math, SEOPress and AIOSeo in one click</strong>
✔ <strong>No ads, fully modular — disable what you don't need</strong>

<h3>Why choose SEOPulse?</h3>

<ul>
	<li><strong>All in one</strong>: No need for separate plugins for sitemaps, redirects, schemas, or analytics. SEOPulse bundles everything. Disable unused modules with one click.</li>
	<li><strong>Easy AND powerful</strong>: The setup wizard guides you through initial configuration. Advanced users get access to 99+ template variables, REST API endpoints and WP-CLI commands.</li>
	<li><strong>Modern architecture</strong>: Built on PHP 8.1 with a modular design, SEOPulse is fast, extensible, and developer-friendly.</li>
	<li><strong>Migrate easily</strong>: 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.</li>
</ul>

<h3>Features</h3>

<ul>
	<li><strong>Installation wizard</strong> to quickly setup your site</li>
	<li><strong>Content analysis</strong> with up to 5 focus keywords per post and real-time SEO scoring (0–100)</li>
	<li><strong>18+ content checks</strong>: title structure, heading hierarchy, word count, keyword density, links, images, alt text</li>
	<li><strong>Readability analysis</strong>: Flesch Reading Ease, sentence length, passive voice, complex words, transition words</li>
	<li><strong>Mobile / Desktop Google Preview</strong> to see how your post appears in search results</li>
	<li><strong>Facebook, Twitter & LinkedIn social previews</strong> directly in the editor sidebar</li>
	<li><strong>SEO titles & meta descriptions</strong> with dynamic variables (post title, author, date, custom fields…)</li>
	<li><strong>Meta Template Engine</strong>: 16 namespaces, 99+ variables, conditional rendering, fallback chains</li>
	<li><strong>Open Graph & Twitter Cards</strong> for better social sharing on Facebook, LinkedIn, Twitter, WhatsApp…</li>
	<li><strong>Custom canonical URL</strong> and robots directives (noindex, nofollow, noarchive)</li>
	<li><strong>XML Sitemaps</strong>: posts, pages, custom post types, taxonomies, images</li>
	<li><strong>Google News Sitemap</strong> with multilingual support (WPML, Polylang, TranslatePress)</li>
	<li><strong>robots.txt management</strong> with auto-insertion of sitemap URL</li>
	<li><strong>301/302 URL redirections</strong> with exact matching, hit counter, and chain detection</li>
	<li><strong>404 monitoring</strong>: automatic logging with referrer, user agent, deduplication, and bot filtering (up to 100 entries)</li>
	<li><strong>Redirect suggestions</strong> for 404 URLs</li>
	<li><strong>CSV export</strong> for redirects and 404 logs</li>
	<li><strong>Local Business SEO</strong>: single-location JSON-LD schema with address, opening hours, phone, email, social profiles, business identity, logo, ratings, and pricing</li>
	<li><strong>JSON-LD schema</strong>: Organization, WebSite, Article, FAQ, HowTo, Product (WooCommerce)</li>
	<li><strong>JSON-LD validator</strong> with browser preview</li>
	<li><strong>Google Analytics 4</strong> (GA4) with Consent Mode v2 and GDPR compliance</li>
	<li><strong>Google Tag Manager</strong> (GTM) with consent-aware script injection</li>
	<li><strong>GDPR cookie consent banner</strong>: customizable position, theme, message, and button text</li>
	<li><strong>Instant indexing</strong>: IndexNow protocol and Google Indexing API with submission log</li>
	<li><strong>Google Suggest integration</strong> for keyword research in the editor</li>
	<li><strong>WooCommerce support</strong>: Product schema auto-injection, meta template variables (price, SKU, rating…)</li>
	<li><strong>SEO columns</strong> in post/page lists: sortable score, title, description, focus keywords with color-coded badges</li>
	<li><strong>Admin bar SEO score</strong> for quick reference</li>
	<li><strong>Image ALT auto-fill</strong> and image diagnostics</li>
	<li><strong>HTML Head cleanup</strong>: remove generator tag, emoji scripts, WLW manifest, shortlinks, RSD links</li>
	<li><strong>Freeze Modified Date</strong> to preserve SEO history on post edits</li>
	<li><strong>Import/Export settings</strong> in JSON format and one-click plugin reset</li>
	<li><strong>Migrate from</strong> Yoast SEO, Rank Math, SEOPress and All In One SEO</li>
	<li><strong>WP-CLI commands</strong>: analyze, dashboard, migrate, export, import</li>
	<li><strong>Full REST API</strong> for all major features</li>
	<li><strong>Multisite compatible</strong></li>
	<li><strong>Multilingual ready</strong>: WPML, Polylang, TranslatePress</li>
</ul>

<h3>All Features Included</h3>

SEOPulse ships with every feature unlocked — no upsells, no limits:

<ul>
	<li><strong>Unlimited focus keywords</strong> per post</li>
	<li><strong>Unlimited redirections</strong> with regex pattern support and capture groups</li>
	<li><strong>CSV redirect import/export</strong> for bulk redirect management</li>
	<li><strong>Extended Local SEO fields</strong>: fax, GPS coordinates, price range, aggregate rating, area served, founding date, number of employees, payment methods, slogan, currencies accepted…</li>
</ul>

<h3>WooCommerce SEO</h3>

SEOPulse integrates with WooCommerce out of the box:

<ul>
	<li>Automatic Product JSON-LD schema (name, price, availability, SKU, ratings, brand, images)</li>
	<li>WooCommerce variables in the Meta Template Engine (price, SKU, rating, stock…)</li>
	<li>Freeze Modified Date to preserve SEO history on product edits</li>
	<li>Enhanced product schema, breadcrumb customization, and category SEO optimization</li>
</ul>

<h3>Developers will love SEOPulse!</h3>

<ul>
	<li>Modular architecture with 6 toggleable modules</li>
	<li>Full REST API under <code>/wp-json/seopulse/v1/</code> for every feature</li>
	<li>WP-CLI commands for batch operations (analyze, migrate, export, import)</li>
	<li>Hooks and filters for extensibility (<code>seopulse_container_built</code>, <code>seopulse_modules_definition</code>…)</li>
	<li>Modern codebase with PSR-4 autoloading</li>
</ul>

== Installation ==

1. Upload 'seopulse' to the '/wp-content/plugins/' directory
2. Activate the plugin through the 'Plugins' menu in WordPress
3. Click on SEOPulse in the admin menu and follow the setup wizard

<strong>Requirements:</strong> 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/wp-seopulse-free

See the "Source Code & Build Instructions" section below for details on how to compile the assets yourself.

== External Services ==

This plugin connects to several third-party external services as described below. No data is sent to any external service without the site administrator explicitly enabling the corresponding feature.

= Google Analytics 4 (GA4) =

When the GA4 tracking feature is enabled by the administrator, this plugin loads the Google Analytics 4 script on the frontend of your website.

* **What it does:** Collects anonymous website usage and traffic data for analytics purposes.
* **When data is sent:** On every frontend page load, after the visitor has given consent (if the cookie consent banner is enabled).
* **What data is sent:** Page views, user interactions, browser information, and other analytics data are collected client-side by Google's script and sent to Google's servers.
* **Service provider:** Google LLC
* [Google Analytics Terms of Service](https://marketingplatform.google.com/about/analytics/terms/us/)
* [Google Privacy Policy](https://policies.google.com/privacy)

= Google Tag Manager (GTM) =

When the GTM feature is enabled by the administrator, this plugin loads the Google Tag Manager script and noscript iframe on the frontend.

* **What it does:** Manages and deploys marketing and analytics tags on your website.
* **When data is sent:** On every frontend page load, after the visitor has given consent (if the cookie consent banner is enabled).
* **What data is sent:** Page views, browser information, and any data configured within your GTM container. The GTM container ID is embedded in the script URL.
* **Service provider:** Google LLC
* [Google Tag Manager Terms of Service](https://marketingplatform.google.com/about/analytics/tag-manager/use-policy/)
* [Google Privacy Policy](https://policies.google.com/privacy)

= Google Consent Mode v2 =

When Google Consent Mode v2 is enabled alongside GA4 or GTM, this plugin injects a consent defaults script on the frontend.

* **What it does:** Sets all Google consent categories to "denied" by default until the visitor explicitly grants consent via the cookie banner.
* **When data is sent:** No additional data is sent. This script configures the behavior of other Google scripts already loaded on the page.
* **Service provider:** Google LLC
* [Google Consent Mode documentation](https://developers.google.com/tag-platform/security/guides/consent)
* [Google Privacy Policy](https://policies.google.com/privacy)

= Google Indexing API =

When the Google Indexing feature is enabled by the administrator and a service account JSON key file has been uploaded, this plugin submits URLs to Google for indexing.

* **What it does:** Notifies Google when pages are published, updated, or deleted so they can be crawled and indexed faster.
* **When data is sent:** Automatically when a post is published, updated, or deleted, or manually via the admin interface.
* **What data is sent:** The page URL and the action type (URL_UPDATED or URL_DELETED). For authentication, a JWT assertion signed with the service account private key is sent to Google's OAuth2 token endpoint.
* **Service provider:** Google LLC
* [Google Indexing API Terms of Service](https://developers.google.com/terms)
* [Google Privacy Policy](https://policies.google.com/privacy)

= Google Autocomplete (Google Suggest) =

This plugin uses the Google Autocomplete API to provide keyword suggestions in the editor.

* **What it does:** Retrieves keyword suggestions based on a search query to help with SEO keyword research.
* **When data is sent:** When an administrator uses the Google Suggest feature in the post editor. Requests are rate-limited (2 per minute) and results are cached for 1 hour.
* **What data is sent:** The search keyword and the site language code.
* **Service provider:** Google LLC
* [Google Terms of Service](https://policies.google.com/terms)
* [Google Privacy Policy](https://policies.google.com/privacy)

= Google Sitemap Ping =

When an administrator manually triggers a search engine ping from the Sitemap settings page, this plugin notifies Google about the sitemap.

* **What it does:** Notifies Google that a sitemap has been updated.
* **When data is sent:** Only when the administrator clicks the "Ping search engines" button.
* **What data is sent:** The sitemap URL of your website.
* **Service provider:** Google LLC
* [Google Terms of Service](https://policies.google.com/terms)
* [Google Privacy Policy](https://policies.google.com/privacy)

= Bing Sitemap Ping =

When an administrator manually triggers a search engine ping from the Sitemap settings page, this plugin notifies Bing about the sitemap.

* **What it does:** Notifies Bing that a sitemap has been updated.
* **When data is sent:** Only when the administrator clicks the "Ping search engines" button.
* **What data is sent:** The sitemap URL of your website.
* **Service provider:** Microsoft Corporation
* [Bing Webmaster Tools Terms of Use](https://www.bing.com/webmasters/terms)
* [Microsoft Privacy Statement](https://privacy.microsoft.com/en-us/privacystatement)

= IndexNow API =

When the IndexNow feature is enabled by the administrator, this plugin submits URLs to the IndexNow API for faster indexing by participating search engines (Bing, Yandex, and others).

* **What it does:** Notifies search engines when pages are published, updated, or deleted.
* **When data is sent:** Automatically when a post is published, updated, or deleted.
* **What data is sent:** The page URL and an auto-generated API key. The request is sent to `https://api.indexnow.org/indexnow`.
* **Service provider:** IndexNow.org (supported by Microsoft Bing, Naver, Seznam.cz, Yandex, and Yep)
* [IndexNow Terms and Conditions](https://www.indexnow.org/terms)
* [Microsoft Privacy Statement](https://privacy.microsoft.com/en-us/privacystatement)

= OpenStreetMap Nominatim Geocoding API =

The Local SEO module uses the Nominatim geocoding API to convert a business address into GPS coordinates.

* **What it does:** Converts an address to GPS coordinates (geocoding) directly from the Local SEO admin settings.
* **When data is sent:** When an administrator clicks the "Get Coordinates" button after filling in their business address.
* **What data is sent:** The address search query. The administrator's IP address is visible to the API server.
* **Service provider:** OpenStreetMap Foundation
* [Nominatim Usage Policy](https://operations.osmfoundation.org/policies/nominatim/)
* [OpenStreetMap Privacy Policy](https://wiki.osmfoundation.org/wiki/Privacy_Policy)

= YouTube (Privacy-Enhanced Mode) =

The setup wizard embeds a tutorial video using YouTube's privacy-enhanced mode.

* **What it does:** Displays an embedded YouTube video in the plugin setup wizard.
* **When data is sent:** When an administrator clicks the play button on the video in the setup wizard. YouTube's privacy-enhanced mode (youtube-nocookie.com) is used to minimize tracking.
* **What data is sent:** Standard video embed request data (IP address, browser information). A video thumbnail image is also loaded from img.youtube.com.
* **Service provider:** Google LLC (YouTube)
* [YouTube Terms of Service](https://www.youtube.com/t/terms)
* [Google Privacy Policy](https://policies.google.com/privacy)

= XML Sitemaps Validator (xml-sitemaps.com) =

The Sitemap settings page includes a link that lets administrators validate their sitemap against the XML Sitemap standard using the xml-sitemaps.com online validator.

* **What it does:** Validates the XML sitemap file of your website for conformity with the XML Sitemap protocol.
* **When data is sent:** Only when the administrator explicitly clicks the "Validate sitemap" link. The link opens the external validator in a new browser tab — no data is sent automatically by the plugin.
* **What data is sent:** The public URL of your website's sitemap is passed as a URL parameter to the validator.
* **Service provider:** xml-sitemaps.com
* [xml-sitemaps.com Privacy Policy](https://www.xml-sitemaps.com/privacy-policy.html)

== Source Code & Build Instructions ==

The full uncompiled source code is publicly available on GitHub:
https://github.com/wp-seopulse/wp-seopulse-free

The compiled and minified files in `assets/build/` (e.g. `admin.js`, `editor-sidebar.js`, `setup-wizard.js`, etc.) are generated from the human-readable source files using `@wordpress/scripts` (webpack). No external code is fetched at build time beyond npm dependencies declared in `package.json`.

= Source file locations (in the GitHub repository) =

* JavaScript / TypeScript source: `assets/src/` (React components, Gutenberg blocks, admin pages)
* SCSS source for admin styles: `assets/css/seopulse-admin.scss`
* SCSS source for module styles: `Modules/MetaSeo/assets/css/`
* Webpack configuration: `webpack.config.js`
* Build dependencies: `package.json`

= Build Instructions =

To build from source, clone the GitHub repository and run the following commands. You need Node.js (v18 or higher) and npm.

1. Clone the repository: `git clone https://github.com/wp-seopulse/wp-seopulse-free`
2. Navigate to the plugin directory: `cd wp-seopulse-free`
3. Install dependencies: `npm install`
4. Build production assets: `npm run build`
5. For development with live rebuilds: `npm start`

The build process uses `@wordpress/scripts` (which includes webpack) to compile TypeScript/JSX into JavaScript and SCSS into CSS. The output is written to `assets/build/`.

= PHP Dependencies =

Composer is used for PHP autoloading. Vendor dependencies are included in the `vendor/` directory. To regenerate: `composer install --no-dev`

== Frequently Asked Questions ==

= What are the requirements? =

SEOPulse requires WordPress 6.0 or higher and PHP 8.1 or higher.

= Does SEOPulse support custom post types? =

Yes. All public custom post types are supported in sitemaps, SEO analysis, and the SEO metabox. Additional post types can be added via filters.

= How is the SEO score calculated? =

The global score is a weighted combination of four categories:

* Content Analysis: 35%
* Meta Tags: 25%
* Readability: 20%
* Technical SEO: 20%

The thresholds are customizable through filters.

= Can I use more than one focus keyword? =

Yes. SEOPulse supports unlimited focus keywords per post, each with individual scoring.

= Which types of sitemaps does SEOPulse support? =

XML sitemaps for posts, pages, custom post types, taxonomies, and images. A Google News sitemap is also available with multilingual support (WPML, Polylang, TranslatePress).

= Can I manage redirections and 404 errors? =

Yes. SEOPulse includes a full redirections manager with 301/302 redirects, regex patterns, 404 logging (up to 100 entries), hit tracking, chain detection, and CSV import/export.

= Does SEOPulse support instant indexing? =

Yes. SEOPulse supports IndexNow protocol and Google Indexing API, with automatic URL submission on publish/update and an admin log viewer.

= Is WooCommerce supported? =

Yes. SEOPulse includes WooCommerce Product schema auto-injection, a Product Grid Gutenberg block, WooCommerce meta template variables, and Freeze Modified Date support.

= Can I migrate from another SEO plugin? =

Yes. SEOPulse includes one-click migration from Yoast SEO, Rank Math, SEOPress and All In One SEO to import focus keywords, meta tags, and Open Graph data.

= Is the plugin multisite compatible? =

Yes. SEOPulse supports multisite and performs per-site cleanup on uninstall.

= Is SEOPulse GDPR compliant? =

Yes. The cookie consent banner supports Google Consent Mode v2, script blocking until consent is granted, and admin consent logging for compliance audits.

= How do I get support? =

Use the WordPress.org support forum.

= Does SEOPulse include a REST API? =

Yes. All features are accessible via REST endpoints under `/wp-json/seopulse/v1/`.

== Screenshots ==
1. SEOPulse dashboard
2. SEOPulse metabox
3. Module Meta SEO settings
4. Module Local SEO settings
5. Module Sitemap/Robot Manager
6. Module Redirect Manager
7. Module 404 Monitor
8. Module Instant Indexing
9. Module Analysis
10. SEOPulse Setup Wizard

== Changelog ==

= 1.0.0 =

Initial release.
