pedrojimenez.dev
All work
Web app2026 · in productionView it live

C21 Perdomo

Headless Next.js storefront over an existing WordPress catalog, serving ~1,400 property listings in English, Spanish, French, and German — a build where routing and technical SEO are the architecture, not an afterthought.

C21 Perdomo
C21 Perdomo — // what shipped 1C21 Perdomo — // what shipped 2C21 Perdomo — // what shipped 3
// the problem

In real estate nobody buys a house from a page that does not rank, so organic search is the whole game — and it is brutally unforgiving of exactly what a four-language site gets wrong. An Ahrefs crawl surfaced 6,284 hreflang errors, hundreds of 404s, and canonicals pointing at dead URLs. The WordPress backend was built for a single-language brochure, and its RankMath canonical field returned the English URL for every locale, quietly telling Google to ignore the Spanish, French, and German pages entirely.

// the build

One routing map as the single source of truth, with every SEO signal computed from it instead of trusted from the CMS.

Every translated slug is defined once in one routing table; canonicals, hreflang alternates, x-default, sitemaps, and navigation links all derive from it. No duplicated route trees to drift apart — the class of bug that produced 6,284 hreflang errors from a single root cause.
Canonicals computed locally rather than read from WordPress, because RankMath returned the English URL for all four locales. Getting this wrong deindexes three languages.
Deleted listings return a real HTTP 410 Gone instead of WordPress's 200-with-a-"Property Not Found"-title — the soft-404 pattern Google explicitly discourages — and are dropped from the sitemap so crawl budget goes to live inventory.
Property pages are statically rendered with hourly ISR: edge-cacheable and fast, but never more than an hour stale on price, with on-demand revalidation for urgent corrections.
Meta Pixel and the Conversions API fire on every property view keyed to the catalog listing ID rather than the WordPress post ID, so retargeting audiences match real inventory instead of silently failing to resolve.
SEO is enforced by scripts, not vibes: a 55-check validator runs against live URLs for canonical, hreflang, html lang, x-default, and redirect correctness, alongside sitemap-coverage and architecture audits before every deploy.
// what shipped

Live at c21perdomo.com with sitemap coverage at roughly 99% across all four languages — 345 to 349 listings per locale, up from the handful the audit found indexed. A multilingual real estate site that shows up in search in every market it serves, on top of a legacy CMS that was never designed for headless use. The hard part was never translation strings; it was making Google understand every page in every locale.

← PreviousMelowNext →Social Command Center