wiki/knowledge/wordpress/reynolds-must-use-plugin-schema-injection.md Layer 2 article 647 words Updated: 2026-03-17
↓ MD ↓ PDF
wordpress seo schema reynolds mu-plugin

Reynolds – Must-Use Plugin for Schema Injection

Overview

During the March 2026 SEO audit of the Reynolds site, schema injection was identified as a remaining gap after meta titles, descriptions, and target keywords were resolved via AI automation. The chosen implementation approach is a WordPress Must-Use (MU) plugin to inject proper structured data schema across all pages sitewide.

This article documents the rationale, implementation notes, and caveats for that plugin so the approach is not forgotten or misattributed to unknown causes in the future.

Background

The Reynolds site reached an Ahrefs health score of 100 after the March 2026 audit cycle, with the following fixes applied:

Schema injection was the final outstanding SEO item flagged for the site. Rather than relying on the existing SEO plugin (SEOPress) or adding schema manually page-by-page, an MU plugin was chosen to handle this sitewide in a consistent, plugin-independent way.

See the broader audit context in [1].

What Is a Must-Use Plugin?

A WordPress Must-Use (MU) plugin lives in /wp-content/mu-plugins/ and is automatically loaded on every page request — it cannot be deactivated from the WordPress admin UI. This makes it appropriate for injecting code that must always be present, such as sitewide schema markup.

Key properties:
- Always active; not visible in the standard Plugins list
- Loads before regular plugins
- Cannot be accidentally disabled by a client or another team member

Implementation Notes

⚠️ Documentation requirement: Because MU plugins are invisible in the standard WordPress admin, this plugin must be documented here and in the Reynolds client file. Without documentation, future developers will not know it exists and may be confused by schema appearing on pages with no obvious source.

What the plugin injects

The plugin should inject JSON-LD structured data schema appropriate to the Reynolds business type (moving company / local business) on the relevant pages. At minimum this should include:

Placement

The plugin hooks into wp_head to output the JSON-LD <script> block. Example structure:

<?php
/*
 * Plugin Name: Reynolds Schema Injection
 * Description: Injects JSON-LD structured data schema sitewide for Reynolds.
 * Version: 1.0
 * Author: Asymmetric
 */

add_action( 'wp_head', 'reynolds_inject_schema' );

function reynolds_inject_schema() {
    // Inject LocalBusiness / MovingCompany schema
    // TODO: populate with finalized schema values
    echo '<script type="application/ld+json">' . "\n";
    echo '{ ... }' . "\n";
    echo '</script>' . "\n";
}

Conflict check

Before deploying, verify that SEOPress (or any active SEO plugin) is not already outputting conflicting schema for the same page types. Duplicate schema blocks are not harmful but are untidy and can cause confusion during future audits.

Open Action Items

Why Not Use the SEO Plugin for This?

The existing SEO plugin (SEOPress) was considered but the MU plugin approach was preferred because:

  1. SEO plugins can be deactivated or switched out; schema injected via MU plugin persists regardless
  2. Reduces dependency on plugin-specific schema UI, which varies across plugin versions
  3. Aligns with a broader team direction of reducing plugin count and handling more functionality directly — the same rationale that led to removing the security plugin that was causing 500 errors and slowing sites down