Falta el campo «priceCurrency» (en «offers.priceSpecification»)

Falta el campo priceCurrency (en offers.priceSpecification)

Cierto día, uno de mis clientes se enfrentó a un problema puntual en Google Search Console que podría estar afectando la visibilidad y el rendimiento de su tienda en línea. El error reportado fue el siguiente: Falta el campo «priceCurrency» (en «offers.priceSpecification»). Este tipo de mensajes pueden generar confusión, sobre todo si no estás familiarizado con los detalles técnicos que Google espera para interpretar correctamente la información sobre los productos en un sitio web.

El sitio en cuestión está construido en WordPress y utiliza WooCommerce para gestionar la tienda virtual. Además, cuenta con los plugins Yoast SEO y Yoast WooCommerce, los cuales son herramientas populares para optimizar el SEO y mejorar el rendimiento de los productos dentro de la tienda. A pesar de tener estos plugins bien configurados, el error persistía, y al analizarlo más a fondo, descubrí que la causa del inconveniente radicaba en una de las fichas de productos, más específicamente, en los metadatos relacionados con los precios.

Cuando Google rastrea un sitio web, especialmente para tiendas en línea, se espera que los datos estructurados estén bien implementados para garantizar que los productos sean interpretados correctamente en los resultados de búsqueda, y que funciones como los rich snippets (fragmentos enriquecidos) puedan mostrarse de forma efectiva. En este caso, la falta del campo «priceCurrency» dentro de la especificación del precio de los productos era el motivo del error.

Este tipo de errores puede impactar negativamente en el rendimiento de búsqueda, ya que Google no puede asociar correctamente la moneda del producto, lo que afecta tanto la visibilidad como la precisión de la información que se muestra en los resultados. La correcta implementación de los datos estructurados es crucial para garantizar que los productos sean fácilmente identificados, lo que podría influir en el tráfico web y las conversiones de la tienda.

Con el error mencionado

Falta el campo priceCurrency (en offers.priceSpecification)
Falta el campo priceCurrency (en offers.priceSpecification)

 

Revisando el código JSON, nos encontramos con el error: «Falta el campo ‘priceCurrency’ (en ‘offers.priceSpecification’)». Este error se refiere a los datos estructurados en formato JSON-LD, que son utilizados para proporcionar a los motores de búsqueda información más detallada sobre los productos de una tienda. Específicamente, el campo «priceCurrency» es crucial porque indica la moneda en la que se encuentra el precio del producto, algo que es esencial para que Google entienda correctamente los detalles de la oferta.

El JSON-LD (JavaScript Object Notation for Linked Data) es un formato ampliamente utilizado para incrustar datos estructurados en una página web, y es especialmente importante en sitios de comercio electrónico. Este tipo de marcado ayuda a los motores de búsqueda a comprender mejor el contenido de la página, como el precio, la moneda, la disponibilidad del producto, entre otros, lo que mejora la presentación en los resultados de búsqueda, como los rich snippets o fragmentos enriquecidos.

{
  "@context": "https://schema.org",
  "@graph": [{
    "@type": "Product",
    "@id": "https://unatienda.com/libro/argumentos-para-la-defensa-legal-de-los-hombres-victimas-de-la-ley-348/#product",
    "name": "Argumentos para la defensa legal de los hombres víctimas de la ley 348",
    "url": "https://unatienda.com/libro/argumentos-para-la-defensa-legal-de-los-hombres-victimas-de-la-ley-348/",
    "description": "A lo largo de sus páginas, descubrirás:\r\n\r\n \tUn examen detallado de la normativa vigente: La obra analiza a fondo las disposiciones más relevantes de la Ley 348, ofreciendo una perspectiva crítica sobre su interpretación y aplicación.\r\n \tEstudios de caso reveladores: Los ejemplos prácticos incluidos no solo ilustran los desafíos que enfrentan los acusados, sino que también proponen soluciones claras y efectivas para abogados en ejercicio.\r\n \tEstrategias de defensa bien fundamentadas: A través de este libro, el lector accederá a herramientas argumentativas que permiten abordar cada etapa del proceso penal con mayor solidez y profesionalismo.\r\n \tPropuestas para una legislación más inclusiva: Más allá de la crítica, los autores presentan caminos hacia la construcción de un marco jurídico más equitativo, siempre en favor de la justicia.",
    "image": {
      "@id": "https://unatienda.com/libro/argumentos-para-la-defensa-legal-de-los-hombres-victimas-de-la-ley-348/#primaryimage"
    },
    "offers": [{
      "@type": "Offer",

      "priceSpecification": {
        "0": {
          "@type": "UnitPriceSpecification",
          "price": "290.00",
          "priceCurrency": "BOB",
          "valueAddedTaxIncluded": false,
          "validThrough": "2026-12-31"
        },

        "@type": "PriceSpecification",
        "price": "290.00"
      },
      "availability": "http://schema.org/InStock",
      "url": "https://unatienda.com/libro/argumentos-para-la-defensa-legal-de-los-hombres-victimas-de-la-ley-348/",
      "seller": {
        "@id": "https://unatienda.com/#organization"
      },
      "@id": "https://unatienda.com/#/schema/offer/28932-0"
    }],
    "mainEntityOfPage": {
      "@id": "https://unatienda.com/libro/argumentos-para-la-defensa-legal-de-los-hombres-victimas-de-la-ley-348/"
    },
    "brand": {
      "@type": "Brand",
      "name": "Alicia Cerezo Sarabia"
    }
  }]
} // JSON Document

Obviamente el error se encontraba justo en:

 

"priceSpecification":{"0":{"@type":"UnitPriceSpecification","price":"290.00","priceCurrency":"BOB","valueAddedTaxIncluded":false,"validThrough":"2026-12-31"},

Para resolverlo, agregué una función en el archivo functions.php del tema de WordPress. Esta solución fue necesaria porque la implementación de los datos estructurados para los productos de WooCommerce no estaba completada con el campo «priceCurrency», lo que causaba el error en Google Search Console. Al modificar el archivo functions.php, pude inyectar el campo faltante en el marcado JSON-LD de los productos, asegurándome de que el precio y la moneda fueran correctamente definidos.

La función que añadí al archivo functions.php fue diseñada para que, cada vez que se mostrara un producto en la tienda, se generara dinámicamente el campo «priceCurrency» dentro de los metadatos JSON-LD del producto, tomando en cuenta la moneda establecida en WooCommerce. Esto garantizó que no solo se solucionara el error en Google Search Console, sino que también se optimizaran los datos estructurados, mejorando así la interpretación del producto por parte de los motores de búsqueda.

function corregir_schema_json_ld($data) {
    if (isset($data['@type']) && $data['@type'] === 'Product') {
        if (isset($data['offers']) && is_array($data['offers'])) {
            foreach ($data['offers'] as &$oferta) {
                if (is_array($oferta)) {
                    // Asegurar que priceCurrency esté presente directamente en offers
                    if (!isset($oferta['priceCurrency']) && isset($oferta['price'])) {
                        $oferta['priceCurrency'] = 'BOB';
                    }

                    // Corregir priceSpecification si está mal estructurado
                    if (!isset($oferta['priceSpecification']) || !is_array($oferta['priceSpecification'])) {
                        $oferta['priceSpecification'] = [
                            "@type" => "UnitPriceSpecification",
                            "price" => $oferta['price'] ?? "0.00",
                            "priceCurrency" => $oferta['priceCurrency'] ?? "BOB",
                            "valueAddedTaxIncluded" => false,
                            "validThrough" => "2026-12-31"
                        ];
                    } else {
                        // Verificar si priceSpecification tiene una estructura incorrecta
                        if (isset($oferta['priceSpecification'][0]) && is_array($oferta['priceSpecification'][0])) {
                            $oferta['priceSpecification'] = $oferta['priceSpecification'][0]; // Eliminar índice numérico
                        }
                        // Asegurar que priceCurrency esté dentro de priceSpecification
                        if (!isset($oferta['priceSpecification']['priceCurrency'])) {
                            $oferta['priceSpecification']['priceCurrency'] = $oferta['priceCurrency'] ?? "BOB";
                        }
                    }
                }
            }
        }

        // Corregir imagen
        if (isset($data['image']) && is_array($data['image'])) {
            $data['image'] = reset($data['image']);
        }

        // Limpiar la descripción de etiquetas HTML
        if (isset($data['description']) && is_string($data['description'])) {
            $data['description'] = strip_tags($data['description']);
        }
    }

    return $data;
}

add_filter('wpseo_json_ld_output', 'corregir_schema_json_ld', 10, 1);
add_filter('woocommerce_structured_data_product', 'corregir_schema_json_ld', 10, 1);

Tras aplicar los cambios y probar en Google Search console todo mejoró, se resolvió el problema.

 

 

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *