En 12/12/2019 a las 9:30 AM, Prestafan33 dijo:Yo no soy experto en SEO, pero cuando he recibido una auditoría de alguna página normalmente lo que te piden es justo lo contrario, que se indexe solamente una combinación por producto, bien la combinación por defecto, o mejor aún la "canonical", que es la URL del producto sin combinación. Y precisamente eso es lo que suelen hacer los módulos generadores de archivos sitemap, así que entiendo que lo correcto es eso.
Ten en cuenta que un sitemap no es un feed de productos. En los feeds de productos, que se generan para incluir tus productos en los marketplaces, sí que se pueden incluir las combinaciones de productos. En el sitemap, que es para que los buscadores creen un mapa de tu sitio, no. Porque ahí no estás indexando productos sino páginas, y para un producto variable sólo existe una página, aunque el producto tenga 20 posibles variaciones.
Te doy la razón, excepto cuando son productos por color , por ejemplo un zapato rojo o azul, son 2 productos diferentes , incluso prestashop añade el atributo en la url para poder acceder directamente a esta combinación "producto"
Obviamente la canonical, es para indicar cual es la url principal, pero enviando el sitemap de combinaciones NO DEBERIA penalizar,
ESO SI , solo si tienes bien la canonical.
Ademas en el titulo debería mostrar la combinación al cambiar de url
Hay varios módulos que generan los sitemap con las combinaciones, resumiendo el codigo seria asi mas o menos
Aviso que mis conocimientos de SEO, son un poco mas que Basicos, nuestro compañero @Prestafan33 puede que tenga mas razón que yo y sea muy malo añadir este sitemap
$productos = Product::getProducts($id_lang, 0,0, 'name', 'asc', null,$only_active = true); foreach ($productos as $producto){ $combinations = $product->getAttributesResume($id_lang); if(!$combinations){ }else{ foreach($combinations as $combination){ $id_atributo = $combination['id_product_attribute']; $combiatts = $product->getAttributeCombinationsById($id_atributo, $id_lang); $imagenesp = $product->getCombinationImages($id_lang); if ($imagenesp){ foreach($imagenesp as $imagenp){ if ($imagenp[0]['id_product_attribute'] == $combination['id_product_attribute']){ $idimagen = $imagenp[0]['id_image']; $linkic = new Link(); $value = $linkic->getImageLink($product->link_rewrite[$id_lang], $idimagen, 'large_default'); $value = $value; $imagenprincipal = $value; } } }else{ $imagenprincipal = $cover; } $linkp = new Link; $url = $linkp->getProductLink($id_product, null, null, null, null, null, $id_atributo, Configuration::get('PS_REWRITING_SETTINGS'), false, true); $prs[] = array( 'name' => $name, 'loc' => $url, 'imagenprincipal' => $imagenprincipal, 'lastmod' => $product->date_upd, 'combi' => ' - '.$combination["attribute_designation"], ); } } $xml_data =''; $xml_data .= '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" >'; foreach($prs as $pr){ $name = preg_replace('/&(?!#?[a-z0-9]+;)/', ' ',$pr['name']); $xml_data .= '<url> <loc>'.$pr['loc'].'</loc> <image:image> <image:loc>https://'.$pr['imagenprincipal'].'</image:loc> <image:title>'.(string)$name.' '.$pr['combi'].'</image:title> </image:image> </url> '; } $xml_data .= '</urlset>'; $xml= simplexml_load_string($xml_data); $xmld =$xml->asXML(); $dom = new DOMDocument; $dom->preserveWhiteSpace = FALSE; $dom->formatOutput = true; $dom->loadXML($xmld); $dom->save(dirname(__FILE__).'/../../sitemap_combinations.xml'); $dom->save(dirname(__FILE__).'/xml/sitemap_combinations.xml'); }
Puede que falte código o de algún error, lo he copiado mas o menos de un modulo que tengo desarrollado.
Para el SEO, también interesa tener un sitemap de TODAS las imagenes de los productos, algo que no genera el sitemap incluido en el PS