Jump to content
rastreator

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? 

Share this post


Link to post
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

Share this post


Link to post
Share on other sites

¿Cómo podría solucionar lo primero? ¿Dónde está esa sección que citas donde está el campo "item"? ¿Cómo se podría hacer para que no quede vacío?

Gracias

Share this post


Link to post
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...

 

Share this post


Link to post
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

Share this post


Link to post
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)

Share this post


Link to post
Share on other sites

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.

  • Like 1

Share this post


Link to post
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

Share this post


Link to post
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

Share this post


Link to post
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.

Share this post


Link to post
Share on other sites

Nuevamente, MUCHAS gracias, Google ya me marca más de 600 páginas como correctas de las 1400 (aun está en proceso la validación) y en estado pone "tiene buena pinta" (son unos cachondos). Así que tu solución funciona fetén. ¡Mil gracias!

Share this post


Link to post
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!

Share this post


Link to post
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

Share this post


Link to post
Share on other sites

Mil gracias. 

Cuando lo consiga, pondré el código del que parto y el código final, por si alguien con PS 1.6 se encontrase en la misma situación.

Share this post


Link to post
Share on other sites

Muchas gracias por indicarme esta publicación Prestafan, voy a echarle un vistazo porque creo que tienes mi solución, mi Prestashop es 1.7.4.2, estaba barajando la idea de quizás actualizar a la última versión, la 1.7.6.1. que me recomiendas?

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
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

Share this post


Link to post
Share on other sites

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?

Edited by Adrian (see edit history)

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More