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
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.
| 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 |
/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.
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.
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