marzo 13, 2023 Rafa Villaplana

Automatizar el marcado de datos de los productos en un ecommerce

Automatizar Marcado de datos productos ecommerce

Si quieres ganar visibilidad en Google, más concretamente en Google Shopping, uno de los puntos más importantes es el marcado de datos con los fragmentos enriquecidos (rich snippet) de tipo producto. Esto va a permitir a Google identificar con más detalle el tipo de producto que ofreces en tu tienda online, y además, optimizando este tipo de rich snippet vas a poder aparecer en Google Shopping sin necesidad de darte de alta en Google Merchant.

Aunque lo ideal es darse de alta en Google Merchant una vez tengas implementado el marcado de datos de tipo producto en tu ecommerce, ya que de esta forma podrás subir tu feed de productos directamente a Google, sin necesidad de esperar a que Google rastree tu sitio Web e identifique el marcado de datos de tus productos.

Hasta aquí todo bien, pero igual estás pensando, si ya existen plugins o extensiones que te permiten generar ese marcado de datos de fragmentos enriquecidos de productos. Pues la verdad es que sí, pero siempre cojean de algún pie, en algunos faltan campos personalizados y en otros tienes que pagar para poder acceder a más funcionalidades.

Para ello, he creado un script en Python que te permite generar el marcado de datos para productos personalizado con los campos que necesites para tu ecommerce, y encima lo vas a poder usar gratis! Da igual si tienes cientos o miles de productos, en menos de 10 minutos vas va tener un JSON con el marcado de datos para cada producto de tu tienda online.

Lo dicho, no me enrollo más, aquí os dejo el código para que lo podáis usar en vuestra tienda ecommerce, solo tendrás que añadir el script que te genera con un JSON de marcado de producto al final del contenido.

import openpyxl
from openpyxl import *

def rich_snippet_product(product_name,id_product,description,url_product,material,color,brand,logo,low_price,high_price,rating_value,rating_count):
    
    #Convertimos el ID de producto a cadena
    id_product=str(id_product)
    
    #Aquí puedes añadir los campos que necesites para tus productos en concreto
    rich_snippet_json=("<script type="+'"application/ld+json"'+">"
                +"\n"+"{"+'"@context"' +":"+ '"https://schema.org"'+","
                +"\n"+'"@type"'+ ":"+ '"Product"'+","
                +"\n"+'"sku"'+ ":"+ '"'+id_product+'"'+","
                +"\n"+'"name"'+ ":"+ '"'+product_name+'"'+","
                +"\n"+'"description"'+ ":"+ '"'+description+'"'+","
                +"\n"+'"url"'+ ":"+ '"'+url_product+'"'+","
                +"\n"+'"material"'+ ":"+ '"'+material+'"'+","
                +"\n"+'"color"'+ ":"+ '"'+color+'"'+","
                +"\n"+'"brand"'+ ":"+ '{'
                +"\n"+'"@type"'+ ":"+ '"Brand"'+","
                +"\n"+'"name"'+ ":"+ '"'+brand+'"'
                +"\n"+"},"
                +"\n"+'"logo"'+":"+ "{"
                +"\n"+'"@type"'+":"+ '"ImageObject"'+","
                +"\n"+'"url"'+":"+ '"'+logo+'"'+"},"
                +"\n"+'"offers"'+ ":"+ "{"
                +"\n"+'"@type"'+ ":"+ '"AggregateOffer"'+","
                +"\n"+'"lowPrice"'+ ":"+ '"'+low_price+'"'+","
                +"\n"+'"highPrice"'+ ":"+ '"'+high_price+'"'+","
                +"\n"+'"availability"'+":"+ '"http://schema.org/InStock"'+","
                +"\n"+'"priceCurrency"'+ ":"+ '"EUR"'
                +"\n"+"},"
                +"\n"+'"aggregateRating"'+":"+ "{"
                +"\n"+'"@type"'+":"+ '"AggregateRating"'+","
                +"\n"+'"ratingValue"'+ ":"+ '"'+rating_value+'"'+","
                +"\n"+'"ratingCount"'+ ":"+ '"'+rating_count+'"'
                +"\n"+"}"
                +"\n"+"}"
                +"\n"+"</script>")     

    return rich_snippet_json

if __name__ == "__main__":

    #Le pasamos la ruta del feed de productos en formato csv o xlsx
    path = input("Introduce ruta del archivo:")
    print ('Abriendo archivo de productos')
    wb = openpyxl.load_workbook(filename = path)
    print ("+Abriendo Hoja de productos")
    sheet_ranges = wb["datafeed_products"]   
    cont = 0
    num_products = 1000

    for i in range(2, num_products):
        
        cont=cont+1
        if cont == 100:
            wb.save(path)
            cont=0

        estado = sheet_ranges[i][16]
        if estado.value == "FINAL":
            wb.save(path)
            break
        
        else:
            #Extraemos los datos de cada producto desde el feed
            product_name = sheet_ranges[i][1]
            id_product = sheet_ranges[i][2]
            description = sheet_ranges[i][5]
            url = sheet_ranges[i][6]
            material = sheet_ranges[i][18]
            color = sheet_ranges[i][14]
            brand = sheet_ranges[i][9]
            logo = "https://rafavillaplana.com/logo.png"
            low_price = sheet_ranges[i][8]
            high_price = sheet_ranges[i][8]
            rating_value = sheet_ranges[i][3]
            rating_count = sheet_ranges[i][4]

            rich_snippet=rich_snippet_product(product_name.value,id_product.value,description.value,url.value,material.value,color.value,brand.value,logo,low_price.value,high_price.value,rating_value.value,rating_count.value)
            number = "Done" + str(i)
            print (number)
            #Guardamos el script generado con el marcado de datos en el feed de productos
            sheet_ranges.cell(row=i, column=19, value=rich_snippet)
            
    wb.save(path)

El script está pensado para ir recorriendo un feed de productos y extraer la información para crear un JSON que podrás añadir directamente al final del contenido de tus productos. Solo tendrás que ajustar los números de columnas para que te coincidan con los tipos de datos que tengas en tu archivo de productos. A medida que va generando el marcado de datos de cada producto, lo almacena en una nueva columna del feed.

Si te ha parecido interesante para automatizar el marcado de datos de productos para tu ecommerce y tienes ideas de mejora que se podrían añadir al script, déjame un comentario y analizo la posibilidad de incorporar nuevas funcionalidades.

Deja una respuesta

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