SEO Deploy Recovery - Handoff for Stronger-Model Session

Date: May 1, 2026 1:25 AM EDT

Site: aguiarinjurylawyers.com

Outgoing model: Claude Sonnet 4.6

Recommended for execution: Claude Opus 4.7 or GPT-5.5

Severity: HIGH - multiple silent deploy failures masked as success

TL;DR

A multi-track SEO deploy reported "live" but most of it did not actually save. The original session used wp/v2/pages to write RankMath custom fields (silently dropped). Need to re-deploy using /rankmath/v1/updateMeta and verify each save against live HTML, not just HTTP 200.

Confirmed Status (Post-Verification)

Item Reported Actually Live Action Needed
Track A - 23 RankMath title/meta rewrites Live 2 of 23 Re-push 21 via /rankmath/v1/updateMeta
Track A - 3 protected pages (Sam bio, /practice-areas/, /meet-our-team/) Pushed in this session 3 of 3 live None
Track B - 10 internal-linking HTML blocks across 8 hub pages Live 3 of 10 blocks live Re-push 7 missing blocks
Track C - 33 schema injections (20 new) Live 6 of 6 sampled live Likely OK - full verify recommended
WC rewrite - full page rewrite + new title/meta Live Body content live, title/meta did NOT save Re-push title/meta only

Root Cause

/wp-json/wp/v2/pages/{id} POST returns HTTP 200 but silently drops meta.rank_math_* fields. RankMath's custom fields are not registered with WP core REST API. They must be written via /wp-json/rankmath/v1/updateMeta. The HTTP 200 response made every original deploy look successful.

For Track B (HTML content injection), the content field DOES save via wp/v2/pages, but only 3 of 10 blocks made it through. Cause unconfirmed - possibly Cloudways caching, possibly wp_kses filtering, possibly Cloudflare strip. Needs investigation per block.

For Track C (schema), the schema is injected as <script> tags inside the page content, and 6 of 6 sampled pages have it live, so this track appears to have actually worked.

What Works (Confirmed Endpoint)

import json, base64, urllib.request

SITE = "<https://aguiarinjurylawyers.com>"
USER = "Craig Aguiar"
PW   = "g5cx uoO9 GSdj 07wr P8k4 igPt"
AUTH = base64.b64encode(f"{USER}:{PW}".encode()).decode()
UA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"

# WORKS - saves RankMath fields
payload = {
    "objectID": page_id,
    "objectType": "post",
    "meta": {
        "rank_math_title": "...",
        "rank_math_description": "...",
        "rank_math_focus_keyword": "..."
    }
}
req = urllib.request.Request(
    SITE + "/wp-json/rankmath/v1/updateMeta",
    data=json.dumps(payload).encode(),
    headers={
        "Authorization": f"Basic {AUTH}",
        "Content-Type": "application/json",
        "User-Agent": UA
    },
    method="POST"
)
with urllib.request.urlopen(req, timeout=20) as r:
    print(r.status)  # 200 = saved

Verify saves against live HTML, not via wp/v2 read-back. The wp/v2 endpoint does not expose RankMath fields even when set.

TASK 1: Re-Push Track A Metas (21 pages)

Source data: /home/user/workspace/seo-audit/track-a-meta-rewrites-v2.md

Page IDs and proposed metas: /home/user/workspace/seo-audit/deploy-log-track-a.md