Cómo añadir marcado JSON-LD personalizado por solicitud de URL SEO
Problema
El campo “SEO URL request” en los filtros HUSKY <script> etiquetas por razones de seguridad, impidiendo la inserción directa de datos estructurados JSON-LD (marcado de esquema) para resultados enriquecidos de Google.
Resumen de la solución
En lugar de insertar el código JSON-LD completo directamente en el campo de texto SEO, usa claves de esquema en el administrador de HUSKY y almacena el código JSON-LD real en archivos separados o en functions.php.
Método 1: Archivos JSON estáticos (recomendado para esquemas simples)
Paso 1: Crear carpeta de archivos schema
- Navigate to
/wp-content/uploads/ - Crear nueva carpeta:
json-ld-schemas
Paso 2: Crear archivos de esquema JSON
- Crear archivos como
category1.json,products.json, etc. - Dentro de cada archivo, agrega código JSON-LD puro (sin
<script>etiquetas):{ "@context": "https://schema.org", "@type": "CollectionPage", "name": "Product Category", "description": "Category description" }
Paso 3: Añade este código a functions.php:
add_action('init', function () {
$url_request = WOOF_EXT::$includes['applications']['url_request'];
remove_filter('woocommerce_after_shop_loop', array($url_request->seo, 'add_seo_text'), 99999);
add_filter('woocommerce_after_shop_loop', function () use ($url_request) {
$rule = $url_request->seo->check_search_rules();
if (!isset($rule['text']) || !$url_request->seo->do_index()) {
return;
}
$schema_key = apply_filters('woof_seo_text', $url_request->seo->replace_vars($rule['text'], $url_request->seo->get_current_replace_vars()));
if (!empty($schema_key)) {
$upload_dir = wp_upload_dir();
$schemas_dir = $upload_dir['basedir'] . '/json-ld-schemas/';
$schema_file = $schemas_dir . $schema_key . '.json';
if (file_exists($schema_file)) {
$json_content = file_get_contents($schema_file);
echo '<div class="woof_seo_text"><script type="application/ld+json">' . $json_content . "</script></div>\r\n";
}
}
}, 99999);
}, 1);
Paso 4: En el admin de HUSKY (solicitud de URL SEO → campo de texto SEO)
- Ingresa solo la clave de esquema (por ejemplo,
category1) - NO ingreses el código JSON-LD completo
Método 2: Archivos PHP Dinámicos (Para Esquemas Dinámicos)
Paso 1: Crea archivos de esquema PHP en /wp-content/uploads/json-ld-schemas/
Ejemplo: category-dynamic.php
<?php
global $wp_query;
$term = get_queried_object();
$category_name = $term ? $term->name : 'Products';
$category_url = get_term_link($term);
$schema = array(
'@context' => 'https://schema.org',
'@type' => 'CollectionPage',
'name' => $category_name,
'url' => $category_url,
'description' => term_description($term->term_id),
'breadcrumb' => array(
'@type' => 'BreadcrumbList',
'itemListElement' => array(
array(
'@type' => 'ListItem',
'position' => 1,
'name' => 'Home',
'item' => home_url()
),
array(
'@type' => 'ListItem',
'position' => 2,
'name' => $category_name,
'item' => $category_url
)
)
)
);
return $schema;
Paso 2: Añade este código a functions.php:
add_action('init', function () {
$url_request = WOOF_EXT::$includes['applications']['url_request'];
remove_filter('woocommerce_after_shop_loop', array($url_request->seo, 'add_seo_text'), 99999);
add_filter('woocommerce_after_shop_loop', function () use ($url_request) {
$rule = $url_request->seo->check_search_rules();
if (!isset($rule['text']) || !$url_request->seo->do_index()) {
return;
}
$schema_key = apply_filters('woof_seo_text', $url_request->seo->replace_vars($rule['text'], $url_request->seo->get_current_replace_vars()));
if (!empty($schema_key)) {
$upload_dir = wp_upload_dir();
$schemas_dir = $upload_dir['basedir'] . '/json-ld-schemas/';
$schema_file = $schemas_dir . $schema_key . '.php';
if (file_exists($schema_file)) {
$schema_data = include($schema_file);
$json_output = json_encode($schema_data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT);
echo '<div class="woof_seo_text"><script type="application/ld+json">' . $json_output . "</script></div>\r\n";
}
}
}, 99999);
}, 1);
Ejemplo de uso
En el Admin de HUSKY:
- Ve a la configuración de “Solicitud de URL SEO”
- Crea una regla para una combinación de filtros específica
- En el campo “SEO text”, ingresa solo:
category-dynamic(o cualquier nombre de clave) - Guardar
Resultado:
- El archivo de esquema
/wp-content/uploads/json-ld-schemas/category-dynamic.phpse cargará - JSON-LD se renderizará correctamente en el código fuente de la página
- Google puede leer y validar los datos estructurados

Notas importantes
- Usa solo claves en el campo de texto SEO de administración de HUSKY (por ejemplo,
products,category1) - Nunca pegues código JSON-LD completo directamente en el administrador de HUSKY
- Para esquemas estáticos → usa
.jsonarchivos - Para esquemas dinámicos → usa
.phparchivos que devuelven un array - Borra la caché después de realizar cambios
Validación
Después de la implementación, valida tu schema:
- Visita la página filtrada en tu sitio
- Copiar la URL de la página
- Prueba en: https://search.google.com/test/rich-results
- Comprobar errores