Mejora la SEO de tus Productos en WooCommerce con Metaetiquetas y JSON-LD 🚀

En el competitivo mundo del comercio electrónico, tener visibilidad en los motores de búsqueda es vital para atraer clientes. Una forma efectiva de mejorar tu SEO es asegurarte de que tus productos en WooCommerce tengan los datos estructurados adecuados. Estos datos ayudan a los motores de búsqueda a comprender mejor la información sobre tus productos, lo que puede traducirse en una mejor visibilidad y clics en los resultados de búsqueda. En este artículo, te enseñaremos cómo implementar un código que añade metaetiquetas y JSON-LD a tus productos de WooCommerce, utilizando el plugin WOOCS para la conversión de divisas. ¡Vamos a ello! 💪

Código completo:

add_action( 'wp_head', 'agregar_metaetiquetas_y_json_ld_en_productos' );
function agregar_metaetiquetas_y_json_ld_en_productos() {
    if ( is_product() ) {
        global $post, $WOOCS;

        // Obtener el objeto del producto
        $product = wc_get_product( $post->ID );

        if ( ! $product ) {
            return; // Si no se puede obtener el producto, salir de la función
        }

        // Obtener datos del producto
        $titulo        = $product->get_name();
        $descripcion   = $product->get_short_description();
        $url_producto  = get_permalink( $product->get_id() );
        $imagen_id     = $product->get_image_id();
        $imagen        = $imagen_id ? wp_get_attachment_url( $imagen_id ) : '';

        // Obtener moneda y precio
        $moneda_base   = get_woocommerce_currency();
        $precio_base   = (float) $product->get_price();
        $precio_cop    = $precio_base;

        // Si la moneda base es USD, convertir el precio a COP
        if ( $moneda_base === 'USD' ) {
            $precio_cop = $WOOCS->convert_from_to_currency( $precio_base, 'USD', 'COP' );
        }

        // Formatear el precio en COP con dos decimales y punto como separador decimal
        $precio_cop_formateado = number_format( $precio_cop, 2, '.', '' );

        // Determinar la disponibilidad del producto
        $disponibilidad = $product->is_in_stock() ? "https://schema.org/InStock" : "https://schema.org/OutOfStock";

        // Determinar la fecha de validez del precio
        $fecha_fin_oferta = $product->get_date_on_sale_to();
        if ( $fecha_fin_oferta ) {
            $precio_valido_hasta = $fecha_fin_oferta->date( 'Y-m-d' );
        } else {
            // Si no hay fecha de fin de oferta, establecer una por defecto (por ejemplo, un año desde la fecha actual)
            $precio_valido_hasta = date( 'Y-m-d', strtotime( '+1 year' ) );
        }

        // Metaetiquetas Open Graph
        echo '<meta property="og:title" content="' . esc_attr( $titulo ) . '">' . "\n";
        echo '<meta property="og:description" content="' . esc_attr( $descripcion ) . '">' . "\n";
        echo '<meta property="og:url" content="' . esc_url( $url_producto ) . '">' . "\n";
        if ( $imagen ) {
            echo '<meta property="og:image" content="' . esc_url( $imagen ) . '">' . "\n";
        }
        echo '<meta property="og:type" content="product">' . "\n";

        // Metaetiquetas Twitter Card
        echo '<meta name="twitter:card" content="summary_large_image">' . "\n";
        echo '<meta name="twitter:title" content="' . esc_attr( $titulo ) . '">' . "\n";
        echo '<meta name="twitter:description" content="' . esc_attr( $descripcion ) . '">' . "\n";
        if ( $imagen ) {
            echo '<meta name="twitter:image" content="' . esc_url( $imagen ) . '">' . "\n";
        }

        // Datos estructurados JSON-LD
        $datos_producto = [
            "@context"    => "https://schema.org/",
            "@type"       => "Product",
            "name"        => $titulo,
            "image"       => $imagen ? [ $imagen ] : [],
            "description" => $descripcion,
            "sku"         => $product->get_sku(),
            "offers"      => [
                "@type"         => "Offer",
                "priceCurrency" => "COP",
                "price"         => $precio_cop_formateado,
                "priceValidUntil" => $precio_valido_hasta,
                "availability"  => $disponibilidad,
                "url"           => $url_producto,
            ],
        ];

        echo '<script type="application/ld+json">' . wp_json_encode( $datos_producto, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT ) . '</script>';
    }
}

Paso 1: Agregar la acción para añadir metaetiquetas y JSON-LD.

Iniciaremos por añadir una acción que se ejecute en el encabezado (wp_head) de tu sitio, para inyectar nuestras metaetiquetas y datos estructurados. Aquí está el código:

add_action( 'wp_head', 'agregar_metaetiquetas_y_json_ld_en_productos' );

function agregar_metaetiquetas_y_json_ld_en_productos() {
    if ( is_product() ) {
        global $post, $WOOCS;

Explicación del código:

  • add_action( 'wp_head', 'nombre_funcion' );: Esto le dice a WordPress que ejecute la función agregar_metaetiquetas_y_json_ld_en_productos cuando se cargue el encabezado.
  • if ( is_product() ): Verificamos si la página actual es un producto.

Paso 2: Obtener los datos del producto.

Ahora necesitamos obtener información relevante del producto, como el título, la descripción, el precio y más:

        $product = wc_get_product( $post->ID );

        if ( ! $product ) {
            return; // Si no hay producto, salir de la función
        }

        $titulo        = $product->get_name();
        $descripcion   = $product->get_short_description();
        $url_producto  = get_permalink( $product->get_id());
        $imagen_id     = $product->get_image_id();
        $imagen        = $imagen_id ? wp_get_attachment_url( $imagen_id ) : '';

Explicación del código:

  • wc_get_product( $post->ID ): Obtiene el objeto del producto actual. Si no se puede obtener, salimos de la función.
  • Recoplilamos datos clave como el nombre, la descripción, el enlace y la imagen del producto.

Paso 3: Manejar la moneda y el precio.

Queremos tener en cuenta la moneda y asegurarnos de que el precio se mantenga en la moneda adecuada, incluso tras una conversión:

        $moneda_base   = get_woocommerce_currency();
        $precio_base   = (float) $product->get_price();
        $precio_cop    = $precio_base;

        if ( $moneda_base === 'USD' ) {
            $precio_cop = $WOOCS->convert_from_to_currency( $precio_base, 'USD', 'COP' );
        }

        $precio_cop_formateado = number_format( $precio_cop, 2, '.', '' );

Explicación del código:

  • Se verifica si la moneda base es USD y se convierte a COP usando la función convert_from_to_currency de WOOCS.
  • number_format: Esto se encarga de dar formato al precio en pesos colombianos con dos decimales.

Paso 4: Añadir metaetiquetas Open Graph y Twitter Card.

Ahora que tenemos todos los datos relevantes, podemos inyectar metaetiquetas que ayudarán en las redes sociales:

        echo '<meta property="og:title" content="' . esc_attr( $titulo ) . '">' . "\n";
        echo '<meta property="og:description" content="' . esc_attr( $descripcion ) . '">' . "\n";
        echo '<meta property="og:url" content="' . esc_url( $url_producto ) . '">' . "\n";
        if ( $imagen ) {
            echo '<meta property="og:image" content="' . esc_url( $imagen ) . '">' . "\n";
        }
        echo '<meta property="og:type" content="product">' . "\n";

        echo '<meta name="twitter:card" content="summary_large_image">' . "\n";
        echo '<meta name="twitter:title" content="' . esc_attr( $titulo ) . '">' . "\n";
        echo '<meta name="twitter:description" content="' . esc_attr( $descripcion ) . '">' . "\n";
        if ( $imagen ) {
            echo '<meta name="twitter:image" content="' . esc_url( $imagen ) . '">' . "\n";
        }

Explicación del código:

  • Se crean metaetiquetas que definen cómo se ve el producto en las redes sociales.
  • Usamos funciones como esc_attr() y esc_url() para garantizar la seguridad y sanitización de los datos.

Paso 5: Añadir datos estructurados JSON-LD.

Finalizamos nuestro código con la creación de un objeto de datos estructurados:

        $datos_producto = [
            "@context"    => "https://schema.org/",  
            "@type"       => "Product",  
            "name"        => $titulo,
            "image"       => $imagen ? [ $imagen ] : [],  
            "description" => $descripcion,
            "sku"         => $product->get_sku(),
            "offers"      => [
                "@type"         => "Offer",  
                "priceCurrency" => "COP",  
                "price"         => $precio_cop_formateado,
                "priceValidUntil" => $precio_valido_hasta,
                "availability"  => $disponibilidad,
                "url"           => $url_producto,
            ],  
        ];

        echo '<script type="application/ld+json">' . wp_json_encode( $datos_producto, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT ) . '</script>';
    }

Explicación del código:

  • Creamos un arreglo de datos que establece el contexto del producto, su nombre, imagen, descripción y ofertas.
  • wp_json_encode(): Convierte nuestro array en un formato JSON válido.

Dónde probar si realmente funciona

Puedes probar si realmente han funcionado en este enlace: https://search.google.com/test/rich-results
Es una herramienta oficial de Google

Hemos aprendido a añadir metaetiquetas y datos estructurados en los productos de WooCommerce, mejorando así su visibilidad en los motores de búsqueda y redes sociales. Implementa este código y observa cómo tu SEO se dispara. ¡Es hora de ponerlo en práctica! 🙌👌✅

Compartir esta información