Title: McCrossenSEO
Author: McCrossen Marketing
Published: <strong>ماي 11, 2026</strong>
Last modified: يوليوز 15, 2026

---

Search plugins

![](https://ps.w.org/mccrossenseo/assets/banner-772x250.png?rev=3528152)

![](https://ps.w.org/mccrossenseo/assets/icon-256x256.png?rev=3528152)

# McCrossenSEO

 By [McCrossen Marketing](https://profiles.wordpress.org/mccrossenmarketing/)

[Download](https://downloads.wordpress.org/plugin/mccrossenseo.3.0.17.zip)

 * [Details](https://ary.wordpress.org/plugins/mccrossenseo/#description)
 * [Reviews](https://ary.wordpress.org/plugins/mccrossenseo/#reviews)
 *  [Installation](https://ary.wordpress.org/plugins/mccrossenseo/#installation)
 * [Development](https://ary.wordpress.org/plugins/mccrossenseo/#developers)

 [Support](https://wordpress.org/support/plugin/mccrossenseo/)

## Description

McCrossenSEO™ handles all standard on-page SEO requirements out of the box — meta
titles and descriptions, robots meta, canonical URLs, Open Graph, Twitter/X cards,
JSON-LD schema markup, XML sitemap generation, redirect management, and bulk editing.

**Free features (no account required):**

 * Meta title and description management per post, page, and custom post type
 * Term-level SEO: title and description fields for categories, tags, and WooCommerce
   product taxonomies, rendered on term archives and the shop page
 * Character count indicators (60 for titles, 160 for descriptions)
 * Global title pattern with configurable separator
 * Robots meta controls (noindex, nofollow, max-snippet, max-image-preview, max-
   video-preview)
 * Canonical URL management with paginated content support
 * Open Graph meta (title, description, image) with fallback chain
 * Twitter/X Card meta with card type selector
 * JSON-LD schema markup (Article, WebPage, BreadcrumbList, Organization, LocalBusiness)
 * XML sitemap with configurable post types and automatic noindex exclusion
 * Redirect manager (301, 302, 307)
 * Bulk editor for titles and descriptions across all content
 * Internal link suggestions
 * Import from Yoast, RankMath, AIOSEO, and SEOPress (one-click migration, including
   Yoast taxonomy term data)
 * Analytics and tracking code injection (GA4, GTM, Facebook Pixel) — only loads
   when administrator configures IDs
 * Site verification codes (Google Search Console, Bing Webmaster)
 * robots.txt editor — edit a physical file or serve a managed virtual robots.txt
   through WordPress
 * Diagnostics panel with rate-limited automatic error reporting

**Optional connected features (requires McCrossen Marketing account):**

 * URL Optimization scoring across 59 ranking signals
 * AI-powered SEO recommendations
 * One-click Plugin Bridge: apply meta titles, descriptions, headings, alt text,
   and schema changes directly from the platform to your WordPress site
 * Platform-pushed llms.txt with audit-score-weighted content

The free version is fully functional as a standalone SEO plugin. No account or external
connection is required for free-tier features.

### External Services

This plugin connects to external services depending on which features the site administrator
enables. The plugin makes zero external connections by default. All listed services
activate only after explicit administrator configuration or connection.

#### McCrossen Marketing Platform

**When:** Only when the site is connected via the “Connect to McCrossen” button 
under McCrossenSEO™ > Connect2McCrossen.
 **What is sent:** Site URL, WordPress 
version, PHP version, plugin version, account identifier, and installed McCrossen
plugin list. (The plugin also sends sanitized error reports rate-limited to one 
per error type per hour, even when not connected, to surface plugin-specific issues
to the maintainer. This can be disabled by deactivating the plugin.) **Why:** Authenticated
delivery of platform-generated SEO recommendations, audit data, and (where the account
permits) llms.txt content. **Service URL:** https://mccrossenmarketing.com **Privacy
Policy:** https://mccrossenmarketing.com/privacy-policy/ **Terms of Service:** https://
mccrossenmarketing.com/terms-of-service/

#### Google Analytics 4

**When:** Only when an administrator configures a GA4 Measurement ID under McCrossenSEO
™  Tracking & Verification.
 **What is loaded:** The `gtag.js` script from `https://
www.googletagmanager.com/gtag/js`. **Where:** Site frontend, in `<head>` for site
visitors, only on installs that have configured a GA4 Measurement ID. **Service:**
Google Analytics — https://policies.google.com/privacy and https://www.google.com/
analytics/terms/

#### Google Tag Manager

**When:** Only when an administrator configures a GTM Container ID under McCrossenSEO
™  Tracking & Verification.
 **What is loaded:** The GTM script from `https://www.
googletagmanager.com/gtm.js`, and a `<noscript>` iframe fallback to `https://www.
googletagmanager.com/ns.html`. **Where:** Site frontend, only on installs that have
configured a GTM Container ID. **Service:** Google Tag Manager — https://policies.
google.com/privacy and https://www.google.com/analytics/terms/tag-manager/

#### Meta (Facebook) Pixel

**When:** Only when an administrator configures a Facebook Pixel ID under McCrossenSEO
™  Tracking & Verification.
 **What is loaded:** The pixel script from `https://
connect.facebook.net/en_US/fbevents.js` and a tracking image from `https://www.facebook.
com/tr`. **Where:** Site frontend, only on installs that have configured a Pixel
ID. **Service:** Meta Platforms — https://www.facebook.com/policy.php and https://
www.facebook.com/legal/terms/businesstools

## Screenshots

[⌊SEO meta box on the post editor with title and description fields⌉⌊SEO meta box
on the post editor with title and description fields⌉[

SEO meta box on the post editor with title and description fields

[⌊Settings panel with global title pattern, schema, and sitemap configuration⌉⌊Settings
panel with global title pattern, schema, and sitemap configuration⌉[

Settings panel with global title pattern, schema, and sitemap configuration

[⌊Bulk editor for managing titles and descriptions across all content⌉⌊Bulk editor
for managing titles and descriptions across all content⌉[

Bulk editor for managing titles and descriptions across all content

[⌊XML sitemap configuration with post type selection⌉⌊XML sitemap configuration 
with post type selection⌉[

XML sitemap configuration with post type selection

[⌊Import tool with one-click migration from Yoast, RankMath, AIOSEO, and SEOPress⌉⌊
Import tool with one-click migration from Yoast, RankMath, AIOSEO, and SEOPress⌉[

Import tool with one-click migration from Yoast, RankMath, AIOSEO, and SEOPress

## Installation

 1. Upload the `mccrossenseo` directory to `/wp-content/plugins/`
 2. Activate the plugin through the Plugins menu in WordPress
 3. Go to McCrossenSEO™ in the admin sidebar to configure settings

To enable connected features, click “Connect to McCrossen” under McCrossenSEO™ >
Connect2McCrossen.

## FAQ

### Do I need a McCrossen Marketing account to use this plugin?

No. All core SEO features work without an account or external connection. A McCrossen
Marketing account is only required for URL Optimization scoring, AI recommendations,
and the Plugin Bridge.

### Will this conflict with Yoast, RankMath, or other SEO plugins?

McCrossenSEO™ uses its own meta keys and does not conflict at the database level.
However, running two SEO plugins simultaneously will produce duplicate meta tags.
Deactivate your previous SEO plugin after importing. McCrossenSEO™ includes a one-
click importer for Yoast, RankMath, AIOSEO, and SEOPress.

### Does the free version send any data externally?

The free version makes no external connections by default. External requests are
only made when you explicitly configure them: connecting to McCrossen Marketing,
or adding a Google Analytics / Google Tag Manager / Facebook Pixel ID. See the External
Services section below for details.

### What post types are supported?

McCrossenSEO™ works with all public post types including pages, posts, and WooCommerce
products. The meta box appears automatically on any public custom post type.

### What PHP version is required?

PHP 8.0 or higher is required.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“McCrossenSEO” is open source software. The following people have contributed to
this plugin.

Contributors

 *   [ McCrossen Marketing ](https://profiles.wordpress.org/mccrossenmarketing/)

[Translate “McCrossenSEO” into your language.](https://translate.wordpress.org/projects/wp-plugins/mccrossenseo)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/mccrossenseo/), check
out the [SVN repository](https://plugins.svn.wordpress.org/mccrossenseo/), or subscribe
to the [development log](https://plugins.trac.wordpress.org/log/mccrossenseo/) by
[RSS](https://plugins.trac.wordpress.org/log/mccrossenseo/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 3.0.17

 * Internal: moved the review-request admin script to an enqueued asset (coding-
   standards housekeeping). No functional or user-facing changes.

#### 3.0.16

 * New: archive SEO rendering — meta titles and descriptions now render on the WooCommerce
   shop page (read from the shop page’s own SEO fields) and on category, tag, and
   taxonomy term archives. Previously they only rendered on single posts and pages,
   so values stored for archives were never output.
 * New: term-level SEO — SEO Title and SEO Description fields on the add/edit screens
   of every public taxonomy, plus WooCommerce product attribute taxonomies. Stored
   in term meta; the archive pages render them.
 * New: Yoast taxonomy term import — the importer now migrates Yoast’s term titles
   and descriptions. Template variables convert the same way as the post importer;
   values that can’t be converted are flagged “needs review” and never imported 
   raw. Term imports appear in Apply History and can be rolled back for 30 days,
   like post imports.
 * New: virtual robots.txt ownership — when no physical robots.txt exists, the editor
   saves a managed ruleset that McCrossenSEO serves through WordPress. A physical
   file, when present, always bypasses WordPress and wins; the editor says so instead
   of pretending otherwise.
 * Bug fix: “Create Physical File” now seeds the new file from the live virtual 
   robots.txt output — including rules added by other plugins such as WooCommerce—
   instead of a generic template, and no longer inserts the obsolete wp-includes
   disallow line.
 * Bug fix: when WordPress core or WooCommerce has already marked a page noindex(
   cart, my account), the plugin no longer emits its own “index, follow” robots 
   tag alongside it. The more restrictive directive now holds structurally instead
   of by browser-side precedence.
 * Bug fix: bare ampersands in meta titles are now emitted as the proper HTML entity;
   existing entities are left untouched.
 * Bug fix: sitemap hygiene — post types with zero published items no longer appear
   in the sitemap index, WPBakery internal post types are excluded, and sitemap 
   URLs are served directly without a trailing-slash redirect hop.
 * Change: titles and descriptions are no longer texturized on output. Product titles
   like “5.56×45” or a 16-inch measurement written with a straight quote emit exactly
   as stored instead of being converted to typographic characters. Stored values
   were never modified — this only changes the rendered output.

#### 3.0.15

 * Improvement: the SEO data importer now converts Yoast template variables instead
   of copying them verbatim. `%%title%%` and `%%sitename%%` become their McCrossenSEO
   equivalents (`{title}`, `{sitename}`), `%%sep%%` becomes the literal separator
   character configured in Yoast, and `%%page%%` is dropped (Yoast renders it empty
   outside paginated views). Literal text — like a brand name written out in the
   template — always passes through unchanged. Previously these templates were imported
   as-is, which would have put raw `%%` text in your page titles.
 * Safety: any Yoast value containing a template variable the importer can’t convert
   is flagged “needs review” and left un-imported — never silently stripped or imported
   raw. The preview and the final summary both show the needs-review count and affected
   post IDs.
 * New: every field written by the importer is now recorded in Apply History, so
   individual imported values can be rolled back for 30 days from the History tab.
   This applies to imports from all four supported plugins (Yoast, RankMath, AIOSEO,
   SEOPress).

#### 3.0.14

 * Bug fix: the redirect manager now rejects redirects that would create a loop —
   a URL pointing to itself, or a chain that cycles back (A->B->A). Previously these
   could be saved and would send visitors into an endless redirect. A safeguard 
   at serve time also breaks any self-redirect from rules created in earlier versions.
 * Bug fix: editing an existing redirect no longer silently re-enables it. Previously,
   changing any field (such as the note) on a disabled redirect forced it back to
   active. Disabled redirects now stay disabled, and you can also create a redirect
   in the disabled state.
 * Improvement: saving on the Settings and Tracking & Verification tabs now shows
   a “Settings saved” confirmation. Your settings were always saved correctly; this
   adds the visible confirmation that was missing.
 * Accessibility: the Local Business address fields (street, city, state, ZIP, country)
   now have proper accessible labels for screen readers.

#### 3.0.13

 * Compatibility: bumped `Tested up to` to WordPress 7.0 (released May 20, 2026).
   No code changes — all features verified to work unchanged on WP 7.0. The Plugin
   Bridge, 404 Monitor, redirect manager, sitemap generator, schema output, and 
   tracking pixel injection were all sanity-checked against 7.0’s new admin UI and
   the WP AI Client API surface (which the plugin does not consume).
 * Internal: trimmed the 3.0.11 upgrade notice for WordPress.org compliance (the
   upgrade-notice line is shown on the Plugins update screen and must stay short).

#### 3.0.12

 * New: 404 Monitor now suggests redirect targets by matching broken URLs against
   your published pages and posts. Up to three suggestions per broken URL with one-
   click redirect creation directly from the suggestions.
 * New: Optional WordPress.org review prompt appears after the plugin has been installed
   for three weeks. Easy to dismiss permanently, snooze for fourteen days, or open
   the reviews page.
 * Internal: top-3 suggestions are stored as a compact JSON list in the existing`
   suggested_url` column (no schema change). Legacy single-URL values from earlier
   versions continue to render as a single button and are rewritten to JSON the 
   next time the suggester runs.
 * Internal: added `MCCM_SEO_Review_Nudge` class. The install-age clock starts on
   first activation; existing installs upgrading to 3.0.12 receive a fresh 21-day
   countdown rather than seeing the prompt immediately.

#### 3.0.11

 * Bug fix: the McCrossenSEO™ meta box now renders in its canonical position below
   the content on the post editor for all post types. On some sites it had been 
   appearing in the sidebar due to leftover state from an earlier preview version—
   that position is now restored automatically.
 * All SEO features and platform-connected features (where enabled) continue to 
   work exactly as before; no settings or workflows changed.
 * Removed an unused internal background process that was logging PHP debug warnings
   on sites running with `WP_DEBUG` enabled. If you saw those warnings in your error
   log, they will stop after this update.
 * Cleanup runs automatically on update: a leftover scheduled task and cached options
   from the removed layer are cleared with no action required.
 * Internal: the `McCrossen_SDK` and `McCrossen_CrossSell` classes were removed (
   neither was wired to any user-facing code path). The 15-minute heartbeat (`MCCM_SEO_Heartbeat`)
   is unaffected and remains the sole platform sync channel for connected installs.
   Connection state is read directly from the stored API key. The `sdk_version` 
   field was dropped from heartbeat and diagnostic payloads (it was always reporting
   the `'unknown'` fallback). All other payload fields are unchanged.

#### 3.0.10

 * Plugin Check: added missing `Squiz.PHP.DiscouragedFunctions.Discouraged` to the
   existing `phpcs:ignore` annotation on `class-mccm-seo-admin.php:727` (`@set_time_limit(
   60 )` in `ajax_404_purge_noise`). The `WordPress.PHP.*` rules were already covered;
   the Squiz-flavor rule was missed when alpha.40 originally annotated this line.
   The sibling call at line 876 (rollback batch) already had the Squiz rule covered,
   which is why Plugin Check flagged only one of them. Plugin Check now returns 
   zero ERRORs / zero WARNINGs.

#### 3.0.9

 * Hotfix: 3.0.8 contained a parse error in `includes/helpers.php` introduced when
   adding the new `mccm_seo_custom_head_allowed_html()` and `mccm_seo_sanitize_custom_head()`
   helpers — the existing `if ( ! function_exists( 'mccm_seo_show_in_dev' ) ) :`
   opener was inadvertently removed, leaving a stranded `endif;` and a fatal `syntax
   error, unexpected token "endif"`. Restored the opener. Plugin now activates cleanly
   on a debug-enabled WordPress install. Verified via `php -l` across all PHP files.

#### 3.0.8

 * Bug fix: button labels in the Elementor preview-draft meta box (“Replacing…”,“
   Replaced ✓”, “Discarding…”, “Discarded ✓”) were displaying their literal escape
   sequences (e.g. `Replacing\u2026`) because PHP single-quoted strings do not interpret`\
   u` escapes. Replaced with the actual UTF-8 characters.

#### 3.0.7

 * WordPress.org review round 2 fixes:
 * Replaced broken Google Tag Manager terms URL in readme.txt (`marketingplatform.
   google.com/about/analytics/tag-manager-terms/`  `www.google.com/analytics/terms/
   tag-manager/`).
 * Removed inline `<script>` block from the Connect tab; the manual-setup toggle
   handler is now in the already-enqueued `mccm-seo-admin.js`.
 * Removed inline `<script>` block from the Replace-Original meta box on Elementor
   preview drafts; logic moved to a new `mccm-seo-preview-draft.js` enqueued via`
   admin_enqueue_scripts` only on screens that render that meta box.
 * Replaced direct `ABSPATH` references in `class-mccm-seo-llms.php` and `class-
   mccm-seo-robots.php` with `get_home_path()` so site root path is computed via
   a WordPress function.
 * Replaced direct `WP_PLUGIN_DIR` reference in `class-mccm-seo-migrator.php` with
   a path derived from the plugin’s own location (`MCCM_SEO_DIR`).
 * Replaced raw `is_writable()` probe in `class-mccm-seo-robots.php` with the `WP_Filesystem`
   API.
 * Custom `<head>` code option (`mccm_seo_custom_head`) is now escape-on-output 
   via `wp_kses` with a head-content allowlist, matching the same allowlist applied
   at save time. Removes reliance on save-time-only sanitization.
 * Removed `JSON_UNESCAPED_SLASHES` flag from JSON-LD output in `class-mccm-seo-
   schema.php`. `JSON_HEX_TAG` is preserved as the security-relevant flag.

#### 3.0.0-alpha.1

 * **Plugin slug renamed** from `mccrossen-seo` to `mccrossenseo` to match the McCrossenSEO
   ™ trademark form. Existing installs migrate automatically on activation.
 * WordPress.org compliance pass: removed dead watchdog references, removed deprecated
   Google/Bing sitemap pings (deprecated 2023), fixed sanitization gaps in nonce
   and content readers, hardened REST endpoint permission_callbacks (action-plan,
   webpage-draft) so authentication runs in the permission_callback rather than 
   the handler, added `JSON_HEX_TAG` to JSON-LD output, removed the dead `MCCM_PLATFORM_VERSION`
   conditional in the tracking tab.
 * Inline `<script>` and `<style>` blocks across admin views converted to enqueued
   assets per WP.org guidelines. Affected pages: Pending Optimizations, Redirects
   + 404 Monitor, Import, robots.txt editor.
 * Frontend tracking pixel injection (GA4, GTM, Facebook Pixel) now uses `wp_print_script_tag()`
   and `wp_print_inline_script_tag()` per WordPress 5.7+ guidelines.
 * External Services section in this readme rewritten to accurately disclose all
   conditionally-loaded third-party scripts.
 * Cross-sell module’s inline JS converted to use `wp_print_inline_script_tag()`.
 * Diagnostics file-scope filter updated to recognize the renamed plugin folder.

#### 2.1.7

 * WordPress.org submission release
 * License updated to GPL-2.0-or-later
 * Added comprehensive readme.txt with external services documentation
 * Added sanitize callbacks to all register_setting calls
 * Code compliance review for WordPress.org guidelines

#### 2.1.6

 * SDK stale update fix

#### 2.1.5

 * Plugin Bridge one-click apply for meta, headings, alt text, and schema
 * Bulk editor with post type filtering

#### 2.1.4

 * LLMs.txt generator
 * Internal link suggestions
 * Redirect manager

## Meta

 *  Version **3.0.17**
 *  Last updated **5 أيام ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.0 or higher **
 *  Tested up to **7.0.2**
 *  PHP version ** 8.0 or higher **
 *  Language
 * [English (US)](https://wordpress.org/plugins/mccrossenseo/)
 * Tags
 * [open graph](https://ary.wordpress.org/plugins/tags/open-graph/)[redirects](https://ary.wordpress.org/plugins/tags/redirects/)
   [schema](https://ary.wordpress.org/plugins/tags/schema/)[seo](https://ary.wordpress.org/plugins/tags/seo/)
   [sitemap](https://ary.wordpress.org/plugins/tags/sitemap/)
 *  [Advanced View](https://ary.wordpress.org/plugins/mccrossenseo/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/mccrossenseo/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/mccrossenseo/reviews/)

## Contributors

 *   [ McCrossen Marketing ](https://profiles.wordpress.org/mccrossenmarketing/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/mccrossenseo/)