---
title: Reynolds – Must-Use Plugin for Schema Injection
type: article
created: '2026-03-17'
updated: '2026-03-17'
source_docs:
- raw/2026-03-17-cordwainer-crm-call-internal-130626582.md
tags:
- wordpress
- seo
- schema
- reynolds
- mu-plugin
layer: 2
client_source: null
industry_context: null
transferable: true
---

# 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:

- 27 missing meta titles generated and applied via AI/API automation
- 7 missing meta descriptions generated and applied
- Google Ads audit completed; all recommendations implemented (conversion values, negative keywords, duplicate conversion actions removed)
- Conversion tracking audit completed; overlapping primary conversions resolved

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 [[wiki/meetings/2026-03-17-cordwainer-crm-internal-sync]].

## 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:

- `LocalBusiness` or `MovingCompany` schema on the homepage
- Appropriate `Service` schema on top service pages
- `BreadcrumbList` where applicable

### Placement

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

```php
<?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

- [ ] **Mark:** Finalize and deploy the MU plugin with complete schema values for Reynolds
- [ ] **Mark:** Document the deployed plugin version and schema types in this article once live
- [ ] **Mark:** Confirm no schema conflicts with SEOPress after deployment

## 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

## Related

- [[wiki/clients/reynolds/_index]]
- [[wiki/meetings/2026-03-17-cordwainer-crm-internal-sync]]
- [[wiki/knowledge/seo/ai-seo-automation-workflow]]
- [[wiki/knowledge/wordpress/mu-plugins-overview]]