Jump to content

fallos google search console rutas exploración y productos


Recommended Posts

Buenas, 

Tengo una tienda con prestashop 1.6.1.17 y hasta hace poco (el 18 de septiembre) tenía todo sin errores, y ahora, de repente, google search console me indica dos errores (además de un montón de páginas con advertencias que lo dejaré para cuando sea mayor):

En "Rutas de exploración", 1,85k páginas donde indica "Falta el campo 'item'"

En "Productos", en 467 páginas donde indica "Debe especificarse "offers", "review" y "aggregateRatting", además de "A la puntuación le faltan los valores máximo y mínimo".

Lo más curioso es que tengo 41 páginas válidas y son páginas de producto igual que las demás que dan error.

Alguna pista de por donde puedo ir catando esto? 

Link to comment
Share on other sites

Los errores que te indica tienen que ver con los datos estructurados.

Lo primero creo que se refiere a los breadcrumbs. Cuando Prestashop crea los breadcrumbs, en algunas versiones hay en algunas páginas que deja el último elemento vacío, y por eso Search Console ha empezado a decir ahora que falta el campo "item" (debe ser alguna verificación nueva que le han puesto recientemente).

Concretamente, me refiero a esto:

Captura.JPG.ac92b5745cc2c3b700487db40975d845.JPG

Lo de offers, review y aggregateRatting se refiere a los datos estructurados para los productos. Hay algunos temas que no tienen incorporados todos los datos que exige el esquema "product", y tendrías que modificar la plantilla para añadírselos:

https://schema.org/Product

Edited by Prestafan33 (see edit history)
  • Like 1
Link to comment
Share on other sites

Una pregunta,

¿Puede ser un problema temporal por la caché o algo parecido, que el código no estuviera bien cuando se hizo el rastreo que originó el error?

Porque no es normal que pase en unos productos sí y en otros no... (aunque son más de 1000 los que sí y sólo 49 los que no)

Porque al probar con la herramienta de prueba de datos estructurados de google https://search.google.com/structured-data/testing-tool/u/0/ , en una de las URL que tiene el error, no me sale el error (sólo las advertencias), y de hecho puedo ver el campo "item" listado en la herramienta...

He probado a darle a validar corrección a ver si se arregla, ¿no me penalizarán por eso si luego sigue mal? Espero que no...

 

Link to comment
Share on other sites

Lo primero, creo (no estoy seguro) que el fallo en los breadcrumbs lo tienen las versiones 1.7 de Prestashop anteriores a la 1.7.6. En las nuevas creo que ya no ocurre.

Te digo cómo lo he solucionado yo: En el archivo /themes/nombre-de-tu-tema/templates/_partials/breadcrumb.tpl, está éste fragmento:

{foreach from=$breadcrumb.links item=path name=breadcrumb}
  {block name='breadcrumb_item'}
    <li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem">
      <a itemprop="item" href="{$path.url}">
        <span itemprop="name">{$path.title}</span>
      </a>
      <meta itemprop="position" content="{$smarty.foreach.breadcrumb.iteration}">
    </li>
  {/block}
{/foreach}

El problema ahí es que a veces la variable $path.url y $path.title están vacías, y eso genera el error que te da search console. Como eso ocurre en el último tramo del breadcrumb (el que indica la página actual en la que estás), yo le he indicado que si esas variables están vacías ponga el url de la página actual y en el nombre el nombre de la categoría (si se trata de una categoría), y si no el metatítulo.

Con esos cambios el fragmento queda así:

{foreach from=$breadcrumb.links item=path name=breadcrumb}
  {block name='breadcrumb_item'}
    <li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem">
      <a itemprop="item" href="{if $path.url}{$path.url}{else}{$urls.current_url}{/if}">
        <span itemprop="name">{if $path.title}{$path.title}{elseif isset($category.name) && $category.name}{$category.name}{else}{$page.meta.title}{/if}</span>
      </a>
      <meta itemprop="position" content="{$smarty.foreach.breadcrumb.iteration}">
    </li>
  {/block}
{/foreach}

 

Edited by Prestafan33 (see edit history)
  • Like 1
Link to comment
Share on other sites

Muchísimas gracias, voy a probar tu solución

Edito: Mi código es un poco diferente (theme panda para prestashop 1.6), pero parecido. Pero como no se si voy a meter el zueco, lo pongo aquí por si puedes decirme si está bien el código (tiene establecido ese if para cuando el campo queda vacío) o si tengo que ponerle ese if igual que el tuyo:

<!-- Breadcrumb -->
{if isset($smarty.capture.path)}{assign var='path' value=$smarty.capture.path}{/if}
{if !empty($path)}
	{* Extract bradcrumb links from anchors *}
	{$matchCount = preg_match_all('/<a.+?href="(.+?)"[^>]*>([^<]*)<\/a>/', $path, $matches)}
	{$breadcrumbs = []}
	{for $i=0; $i<$matchCount; $i++}
		{$breadcrumbs[] = ['url' => $matches[1][$i], 'title' => $matches[2][$i]]}
	{/for}

	{* Extract the last breadcrumb which is not link, it's plain text or text inside span *}
	{$match = preg_match("/>([^<]+)(?:(?:<\/\w+>)*\s*)?$/", $path, $matches)}
	{if !empty($matches[1])}
		{$breadcrumbs[] = ['url' => '', 'title' => $matches[1]]}
	{elseif !$match && !$matchCount}
		{$breadcrumbs[] = ['url' => '', 'title' => $path]}
	{/if}
{/if}
<section class="breadcrumb">
    <ul itemscope itemtype="http://schema.org/BreadcrumbList">
	<li  itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="home" href="{if isset($force_ssl) && $force_ssl}{$base_dir_ssl}{else}{$base_dir}{/if}" title="{l s='Return to Home'}" itemprop="item"><span itemprop="name">{l s='Home'}</span></a><meta itemprop="position" content="1" /></li>
	{if !empty($breadcrumbs)}
		{foreach from=$breadcrumbs item=breadcrumb name=crumbs}
		<li class="navigation-pipe">{$navigationPipe}</li>
			<li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem">
				{if !empty($breadcrumb.url)}
					<a href="{$breadcrumb.url}" itemprop="item" title="{$breadcrumb.title}">
						<span itemprop="name">{$breadcrumb.title}</span>
					</a>
				{else}
					<span class="navigation_page" itemprop="name">{$breadcrumb.title}</span>
				{/if}
				<meta itemprop="position" content="{($smarty.foreach.crumbs.iteration|intval + 1)}" />
			</li>
		{/foreach}
	{/if}
    </ul>
</section>

{if isset($smarty.get.search_query) && isset($smarty.get.results) && $smarty.get.results > 1 && isset($smarty.server.HTTP_REFERER)}
<div id="search_return" class="pull-right hidden-xs">
	{capture}{if isset($smarty.get.HTTP_REFERER) && $smarty.get.HTTP_REFERER}{$smarty.get.HTTP_REFERER}{elseif isset($smarty.server.HTTP_REFERER) && $smarty.server.HTTP_REFERER}{$smarty.server.HTTP_REFERER}{/if}{/capture}
	<a href="{$smarty.capture.default|escape:'html':'UTF-8'|secureReferrer|regex_replace:'/[\?|&]content_only=1/':''}" name="back" rel="nofollow">
		<i class="icon-left-open-3"></i> {l s='Back to Search results for "%s" (%d other results)' sprintf=[$smarty.get.search_query,$smarty.get.results]}
	</a>
</div>
{/if}
<!-- /Breadcrumb -->

 

Edited by rastreator (see edit history)
Link to comment
Share on other sites

1 minute ago, Prestafan33 said:

Lo que yo he puesto es para la versión 1.7.x. En la versión 1.6 seguramente será diferente. Ahora no puedo mirar con detenimiento el código que has puesto, luego si no te ha contestado nadie más le echo un vistazo a tu código.

Por supuesto, sin problema, gracias por tu tiempo

Link to comment
Share on other sites

Bueno, ya he revisado el código que has puesto, y aquí tengo que soltar una perorata, que si no la suelto, reviento:

El "breadcrumb" o "rastro de migas" son la serie de enlaces que normalmente aparecen en la parte superior de una página para situar al usuario a través de la jerarquía de niveles, y permitirle moverse a través de ella con facilidad. Por ejemplo, un breadcrumb típico podría ser "Home/calzado/zapatos/zapato piel marrón".

Bien, lo normal en los breadcrumbs es que cada una de las secciones o categorías del breadcrumb contengan un enlace, excepto la última, porque precisamente corresponde a la página en la que se está ubicado, y sería un enlace a sí misma. Esto estaba así en la versión 1.6 de PrestaShop, y se puede ver perfectamente en el fragmento de código que ha puesto rastreator, el cual, para mí, está perfecto.

Ahora bién, aquí llega Google con su brocha gorda y dice que, según el esquema del Listitem,TODOS los elementos de un Breadcrumb, incluido el último, deben tener un item (enlace), y un name (texto). Y empieza a marcar como erróneos los breadcrumbs que no siguen ese esquema al pie de la letra. Y da igual si es lógico lo que piden o no, o si lleva un montón de tiempo haciéndose de otra forma, Google es Dios y todo el mundo entra por el aro y empiezan a cambiarlo y a ponerlo como piden.

Por eso en PrestaShop 1.7 TODOS los elementos del breadcrumb llevan enlace, incluso el último. A mí en algunas webs me han pedido que quitara esos enlaces del último elemento, porque no tenía sentido mantener un enlace que llevara a la misma página, y he tenido que buscar la forma de trampear lo para que Google no lo marcara como erróneo. De modo que lo que hago es, en esos casos, el último elemento de la lista no etiquetarlo como Listitem, y de esa forma Google traga y no se queja.

De modo que el código de rastreator podría quedar así:

<li class="navigation-pipe">{$navigationPipe}</li>
  {if !empty($breadcrumb.url)}
    <li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem">
      <a href="{$breadcrumb.url}" itemprop="item" title="{$breadcrumb.title}">
        <span itemprop="name">{$breadcrumb.title}</span>
      </a>
      <meta itemprop="position" content="{($smarty.foreach.crumbs.iteration|intval + 1)}" />
  {else}
    <li><span class="navigation_page">{$breadcrumb.title}</span>
  {/if}
  </li>

 

Edited by Prestafan33 (see edit history)
  • Like 1
Link to comment
Share on other sites

WOW muchísimas gracias por tu solución, la pruebo y te comento qué dice google. 

Tienes razón en lo que dices, aquí estamos siempre a expensas de google, ojalá algún día la web se descentralice y el seo no dependa casi en exclusiva de una única empresa... Pero por el camino que vamos difícil lo veo.

Link to comment
Share on other sites

Lo de offers, review y aggregateRatting se refiere a los datos estructurados para los productos. Hay algunos temas que no tienen incorporados todos los datos que exige el esquema "product", y tendrías que modificar la plantilla para añadírselos: 
https://schema.org/Product

Otra pregunta, abusando de tu amabilidad, 

Estos datos estructurados referidos a productos, ¿suponen modificar el product.tpl? ¿O está en otro archivo?

Con que me digas esto, ya intento por mi cuenta hacer las modificaciones (o preguntarle al creador de la plantilla Panda). Gracias!

Link to comment
Share on other sites

El archivo a modificar es efectivamente el que indicas (o alguna de sus subpartes, ya que desde él se incluyen con "include" otros archivos).

Si te fijas, hacia el principio tiene la definición de datos estructurados del esquema "producto":

<section id="main" itemscope itemtype="https://schema.org/Product">

En cualquier punto a partir de ahí y hasta el </section> podrías colocarle los parámetros que te pide Google. Para darles el formato correcto puedes consultar aquí (mira al final de la página, en la sección de "propiedades recomendadas"):

https://developers.google.com/search/docs/data-types/product?hl=es-419

Edited by Prestafan33 (see edit history)
  • Like 1
Link to comment
Share on other sites

En 30/9/2019 a las 2:17 PM, Prestafan33 dijo:

En principio la solución que puse en el 5º post de este hilo es precisamente para una instalación que tiene la versión 1.7.4.2.

En la versión 1.7.6.1 creo que no produce (que yo sepa), por lo que también podrías actualizar y se debería solucionar.

Puse tu solución :) de momento está validando Google, ya sabemos que se lo toma con tranquilidad, solo queda esperar, sobre Debe especificarse "offers", "review" y "aggregateRatting también tengo en tooodos los poductos ese problema, como debería solucionarlo? no tengo mucha idea la verdad pero si se me dice, pon esto en tal sitio pues eso si puedo hacerlo :S

Link to comment
Share on other sites

  • 2 months later...
  • 1 month later...
On 12/4/2019 at 9:25 AM, Adrian said:

Gracias @Prestafan33. Ya me estaba volviendo loco también jajaja

Ahora me falta lo de "Debe especificarse "offers", "review" o "aggregateRating". Alguno lo ha resuelto?

Buenas.

Yo lo conseguí según la solucion aquí aportada:

https://github.com/PrestaShop/PrestaShop/issues/12687

Resumiendo:

Editando el fichero themes/TEMA/templates/catalog /_partials /miniatures/product.tpl

Y modificando la parte del codigo:
{block name='product_price_and_shipping'} {if $product.show_price} <div class="product-price-and-shipping pricehv">

Por esta otra.
{block name='product_price_and_shipping'} {if $product.show_price} <div class="product-price-and-shipping pricehv" itemprop="offers" itemscope itemtype="https://schema.org/Offer">

En mi caso a funcionado correctamente.

Link to comment
Share on other sites

On 2/2/2020 at 8:15 PM, DanielRP said:

Buenas.

Yo lo conseguí según la solucion aquí aportada:

https://github.com/PrestaShop/PrestaShop/issues/12687

Resumiendo:

Editando el fichero themes/TEMA/templates/catalog /_partials /miniatures/product.tpl

Y modificando la parte del codigo:
{block name='product_price_and_shipping'} {if $product.show_price} <div class="product-price-and-shipping pricehv">

Por esta otra.
{block name='product_price_and_shipping'} {if $product.show_price} <div class="product-price-and-shipping pricehv" itemprop="offers" itemscope itemtype="https://schema.org/Offer">

En mi caso a funcionado correctamente.

Si, al final hice eso y me funcionó. Gracias igualmente :D

Link to comment
Share on other sites

  • 2 months later...
En 27/9/2019 a las 11:55 AM, Prestafan33 dijo:

Lo primero, creo (no estoy seguro) que el fallo en los breadcrumbs lo tienen las versiones 1.7 de Prestashop anteriores a la 1.7.6. En las nuevas creo que ya no ocurre.

Te digo cómo lo he solucionado yo: En el archivo /themes/nombre-de-tu-tema/templates/_partials/breadcrumb.tpl, está éste fragmento:


{foreach from=$breadcrumb.links item=path name=breadcrumb}
  {block name='breadcrumb_item'}
    <li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem">
      <a itemprop="item" href="{$path.url}">
        <span itemprop="name">{$path.title}</span>
      </a>
      <meta itemprop="position" content="{$smarty.foreach.breadcrumb.iteration}">
    </li>
  {/block}
{/foreach}

El problema ahí es que a veces la variable $path.url y $path.title están vacías, y eso genera el error que te da search console. Como eso ocurre en el último tramo del breadcrumb (el que indica la página actual en la que estás), yo le he indicado que si esas variables están vacías ponga el url de la página actual y en el nombre el nombre de la categoría (si se trata de una categoría), y si no el metatítulo.

Con esos cambios el fragmento queda así:


{foreach from=$breadcrumb.links item=path name=breadcrumb}
  {block name='breadcrumb_item'}
    <li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem">
      <a itemprop="item" href="{if $path.url}{$path.url}{else}{$urls.current_url}{/if}">
        <span itemprop="name">{if $path.title}{$path.title}{elseif isset($category.name) && $category.name}{$category.name}{else}{$page.meta.title}{/if}</span>
      </a>
      <meta itemprop="position" content="{$smarty.foreach.breadcrumb.iteration}">
    </li>
  {/block}
{/foreach}

 

 

En 27/9/2019 a las 11:55 AM, Prestafan33 dijo:

Lo primero, creo (no estoy seguro) que el fallo en los breadcrumbs lo tienen las versiones 1.7 de Prestashop anteriores a la 1.7.6. En las nuevas creo que ya no ocurre.

Te digo cómo lo he solucionado yo: En el archivo /themes/nombre-de-tu-tema/templates/_partials/breadcrumb.tpl, está éste fragmento:


{foreach from=$breadcrumb.links item=path name=breadcrumb}
  {block name='breadcrumb_item'}
    <li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem">
      <a itemprop="item" href="{$path.url}">
        <span itemprop="name">{$path.title}</span>
      </a>
      <meta itemprop="position" content="{$smarty.foreach.breadcrumb.iteration}">
    </li>
  {/block}
{/foreach}

El problema ahí es que a veces la variable $path.url y $path.title están vacías, y eso genera el error que te da search console. Como eso ocurre en el último tramo del breadcrumb (el que indica la página actual en la que estás), yo le he indicado que si esas variables están vacías ponga el url de la página actual y en el nombre el nombre de la categoría (si se trata de una categoría), y si no el metatítulo.

Con esos cambios el fragmento queda así:


{foreach from=$breadcrumb.links item=path name=breadcrumb}
  {block name='breadcrumb_item'}
    <li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem">
      <a itemprop="item" href="{if $path.url}{$path.url}{else}{$urls.current_url}{/if}">
        <span itemprop="name">{if $path.title}{$path.title}{elseif isset($category.name) && $category.name}{$category.name}{else}{$page.meta.title}{/if}</span>
      </a>
      <meta itemprop="position" content="{$smarty.foreach.breadcrumb.iteration}">
    </li>
  {/block}
{/foreach}

 

Buenas tardes, 

acabo de ver este post y está increíble, llevo tiempo buscando solución y no encontraba una buena explicación. Yo no tengo nada que ver con programación y me he metido en la aventura de montar mi propia web!

Tengo el prestashop 1.7.6.4 y me han salido los dos errores mencionados al principio. He aplicado lo que habéis puesto aquí, a ver lo que me dice google. Ya os lo comentaré.

Un saludo y gracias

Link to comment
Share on other sites

  • 3 months later...

Hola amigos, de antemano y por anticipado les agradezco la ayuda que me puedan brindar. (Soy nuevo en PrestaShop y no soy programador)

Presta shop 1.7.6.5

Error google search console: Se debe especificar "name" o "item.name"   

El error me aparece en esta pagina: https://nook-store.com.mx/2-inicio 

1475744827_errorgoogle.thumb.png.8b8127b71dd879fe656937d323b254de.png

Modifique en; /themes/classic/templates/_partials/breadcrumb.tpl segun nos recomienda Prestafan33 solo que no me funciono 

On 9/27/2019 at 4:55 AM, Prestafan33 said:

{foreach from=$breadcrumb.links item=path name=breadcrumb} {block name='breadcrumb_item'} <li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"> <a itemprop="item" href="{if $path.url}{$path.url}{else}{$urls.current_url}{/if}"> <span itemprop="name">{if $path.title}{$path.title}{elseif isset($category.name) && $category.name}{$category.name}{else}{$page.meta.title}{/if}</span> </a> <meta itemprop="position" content="{$smarty.foreach.breadcrumb.iteration}"> </li> {/block} {/foreach}

Así quedo mi código:

<nav data-depth="{$breadcrumb.count}" class="breadcrumb hidden-sm-down">
  <ol itemscope itemtype="http://schema.org/BreadcrumbList">
    {block name='breadcrumb'}
      {foreach from=$breadcrumb.links item=path name=breadcrumb}
        {block name='breadcrumb_item'}
          <li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem">
--------->> <a itemprop="item" href="{if $path.url}{$path.url}{else}{$urls.current_url}{/if}">
--------->> <span itemprop="name">{if $path.title}{$path.title}{elseif isset($category.name) && $category.name}{$category.name}{else}{$page.meta.title}{/if}</span>
            </a>
            <meta itemprop="position" content="{$smarty.foreach.breadcrumb.iteration}">
          </li>
        {/block}
      {/foreach}
    {/block}
  </ol>
</nav>

 

Edited by Israel Loera (see edit history)
Link to comment
Share on other sites

Hola, @Israel Loera.

Al revisar el código de tu web para el breadcrumb esto es lo que veo:

<nav data-depth="2" class="breadcrumb hidden-sm-down">
  <ol itemscope itemtype="http://schema.org/BreadcrumbList">
     
          <li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem">
            <a itemprop="item" href="https://nook-store.com.mx/">
              <span itemprop="name">Inicio</span>
            </a>
            <meta itemprop="position" content="1">
          </li>
              
          <li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem">
            <a itemprop="item" href="">
              <span itemprop="name"></span>
            </a>
            <meta itemprop="position" content="2">
          </li>
          
  </ol>
</nav>

Si te fijas, en el segundo elemento del breadcrumb (segundo li), tanto "item" como "name" están vacíos, y no deberían. La modificación es correcta, pero por algún motivo el breadcrumb está añadiendo un elemento de más vacío al final que no debería estar ahí:

image.png.f85d2702d2cec4e0e9254ccccf2f3ae9.png

Edited by Prestafan33 (see edit history)
Link to comment
Share on other sites

Solucionado muchas gracias por la observación @Prestafan33.

Actualice a presta shop 1.7.6.7 lo cual sobre escribió el archivo breadcrumb.tpl, en el nuevo archivo borraron el segundo li, agregue el codigo que nos recomiendas y listo ya no me sale el error en google search console. 

<nav data-depth="{$breadcrumb.count}" class="breadcrumb hidden-sm-down">
  <ol itemscope itemtype="http://schema.org/BreadcrumbList">
    {block name='breadcrumb'}
      {foreach from=$breadcrumb.links item=path name=breadcrumb}
        {block name='breadcrumb_item'}
          <li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem">
            <a itemprop="item" href="{if $path.url}{$path.url}{else}{$urls.current_url}{/if}">
              <span itemprop="name">{if $path.title}{$path.title}{elseif isset($category.name) && $category.name}{$category.name}{else}{$page.meta.title}{/if}</span>
            </a>
            <meta itemprop="position" content="{$smarty.foreach.breadcrumb.iteration}">
          </li>
        {/block}
      {/foreach}
    {/block}
  </ol>
</nav>

 

 

 

 

Edited by Israel Loera (see edit history)
Link to comment
Share on other sites

  • 6 months later...
On 27/9/2019 at 11:55, Prestafan33 said:

Lo primero, creo (no estoy seguro) que el fallo en los breadcrumbs lo tienen las versiones 1.7 de Prestashop anteriores a la 1.7.6. En las nuevas creo que ya no ocurre.

Te digo cómo lo he solucionado yo: En el archivo /themes/nombre-de-tu-tema/templates/_partials/breadcrumb.tpl, está éste fragmento:


 
  
    
      
        
      
      
    
  

El problema ahí es que a veces la variable $path.url y $path.title están vacías, y eso genera el error que te da search console. Como eso ocurre en el último tramo del breadcrumb (el que indica la página actual en la que estás), yo le he indicado que si esas variables están vacías ponga el url de la página actual y en el nombre el nombre de la categoría (si se trata de una categoría), y si no el metatítulo.

Con esos cambios el fragmento queda así:


 
  
    
      
         
      
      
    
  
}

 

HOla Prestafan33,tengo la  Versión de PrestaShop: 1.7.7.1 y me sale entre otros este error. He sustituido el fragmento que dejaste mas arriba, pero continua igual. ME puedes ayudar? 

 

image.png

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...