Detección de portal
Cabecera, prefijo de ruta y cookie, por ese orden. Adapta logo, cabecera, pie, idioma y contenido.
Un tema a medida que detecta qué portal se está visitando y se integra visualmente con la aplicación principal de cada uno. Detrás, Cloudflare con Workers y caché de página completa complicando lo simple.
Cada portal tiene su aplicación principal y necesitaba un blog que pareciera parte de ella, en su idioma y su mercado, sin mantener una instalación de WordPress por portal.
Todo va detrás de Cloudflare, con Workers que reescriben rutas y caché de página completa. Eso afecta a nonces, a la REST API y a las redirecciones.
Lo que parecía obvio y no era. Descartar bien ahorra días de trabajo en la dirección equivocada.
Multiplica mantenimiento, actualizaciones y contenido duplicado.
Con caché de página completa, PHP no se ejecuta en cada visita.
Un nonce cacheado caduca y rompe el conteo.
Cabecera, prefijo de ruta y cookie, por ese orden. Adapta logo, cabecera, pie, idioma y contenido.
Réplica de la cabecera y el pie de la aplicación principal, con estilos, logos e iconos alojados en local.
Hreflang por post, BreadcrumbList, relacionados con puntuación de relevancia acotados por portal y fechas y categorías localizadas.
El Worker y WordPress no coincidían en la barra final. Un mu-plugin alinea la ruta del blog con la del Worker.
«Updating failed» era Cloudflare limitando wp-json. Las visitas se cuentan con un endpoint REST sin nonce y deduplicación en el cliente.
Convivían el BreadcrumbList del tema, correcto, y uno incompleto del plugin de SEO. Quité el del plugin con un filtro global.
Fragmentos simplificados y sin datos del cliente, para que se vea el enfoque técnico real.
function current_portal(): string {
$header = $_SERVER['HTTP_X_PORTAL'] ?? '';
if ( $header && isset( PORTALS[ $header ] ) ) return $header;
$path = trim( parse_url( $_SERVER['REQUEST_URI'], PHP_URL_PATH ), '/' );
foreach ( PORTALS as $slug => $cfg ) {
if ( str_starts_with( $path, $cfg['prefix'] ) ) return $slug;
}
return $_COOKIE['portal'] ?? DEFAULT_PORTAL;
}add_filter( 'wpseo_schema_graph_pieces', function ( $pieces ) {
return array_filter( $pieces, fn( $p ) => ! $p instanceof \Yoast\WP\SEO\Generators\Schema\Breadcrumb );
}, 11 );Un tema, un flujo editorial y actualizaciones únicas.
Es la única forma fiable detrás de una caché de página completa.
| Indicador | Antes | Después | Contexto |
|---|---|---|---|
| Instalaciones WordPress | 1 por portal | 1 compartida | detección en el tema |
| Breadcrumbs en Search Console | Missing field item | Un BreadcrumbList válido | filtro global |
| Bucle de redirecciones | ERR_TOO_MANY_REDIRECTS | Resuelto | ruta alineada |
| Paginación | /page/2/ en 404 | Numerada | mu-plugin propio |
Con Cloudflare delante, la mitad de los «bugs de WordPress» no son de WordPress. Lo primero que miro son las cabeceras y las reglas del edge.
Sí, si el tema detecta el contexto y el contenido está bien etiquetado por portal.
Porque cachea y reescribe peticiones antes de que lleguen al servidor.
Sí, el tema y un plugin. Google valida cada bloque por separado.
Si ya tienes un WordPress en producción, reviso el contexto y te digo con honestidad si lo que necesitas es desarrollo, SEO técnico, rendimiento o automatización.
Empezar un proyecto