RSS Feed

Problemas con Canonical url en oscommerce

28/06/2016 por Carlos Fabuel

Si te gusta ¡Compártelo!
  • Twitter
  • Facebook
  • email
  • StumbleUpon
  • Delicious
  • Google Reader
  • LinkedIn
  • Tumblr

url canonical problema

Las url canónicas nacieron con la finalidad de hacer más sencillas algunas tareas. En general, se utilizan para solventar errores de programación. Pero como vamos a ver, a veces generan otros problemas de mayor complejidad.

En este caso, se trata de un dominio con una instalación de Oscommerce 2.2 en el que se ha instalado un módulo para crear las url canónicas. Uno de los problemas de instalar módulos creados por otra persona es que la mayor parte de las veces no sabes bien el funcionamiento del mismo y ya si encima lo tienes que modificar suele ser más productivo en muchas ocasiones crearlo desde cero.

Aparentemente el módulo funcionaba bien, pero resulta que empiezan a parecer errores.

Por una parte, se añade a la web la variable de idioma ?language=es. Si sólo hay un idioma mejor que no esté esta variable. Por otra parte, aparece una variable de sesión. Algo que suele ser fácil de eliminar en la mayoría de los casos.

Al parecer el módulo de url canonical se tragaba todo lo que le echaban.

Si la url original era esta:

dominio-maravilloso.com/producto-maravilloso-p-669.html

La url canonical aparecía bien, pero si venía la variable de lenguaje y la variable de sesión este módulo también las incluía como canonical. Como mal extremo, cuando google pasaba por segunda vez por este tipo de urls con variable se generaba otra url a la que se añadía otra variable de sesión:

dominio-maravilloso.com/producto-maravilloso-p-669.html? language=es%3FosCsid%3De00e68042e893dc976ece0173493a383& osCsid=c694c7859444fa3d8d90ae1b2356237c

En este ejemplo hay una variable de lenguaje (language=es), una variable de sesión (osCsid=c694c7859444fa3d8d90ae1b2356237c) y otra variable de sesión antigua (%3FosCsid%3De00e68042e893dc976ece0173493a383).

Como supongo que ya os habréis imaginado, este sistema formaba un bucle sin aparente fin. Cuando google pasa por una url como la anterior añade otra variable de sesión a la url y el módulo que no funciona mostrará la url con esas tres variables de sesión.

En dos semanas el sitio había pasado de tener 4000 páginas indexadas a 35.000. Afortunadamente el problema se corrigió a tiempo y no llegó a tener penalización de posicionamiento por bien poco.

La solución que funcionó fue modificar el archivo .htaccess para eliminar todas las variables de sesión y dejarlo justo con la terminación en html que debía tener el archivo.

Solución con .htaccess:

 

# case: leading and trailing parameters
RewriteCond %{QUERY_STRING} ^(.+)&osCsid=[0-9a-z]+&(.+)$ [NC]
RewriteRule (.*) $1?%1&%2 [R=301,L]
#
# case: leading-only, trailing-only or no additional parameters
RewriteCond %{QUERY_STRING} ^(.+)&osCsid=[0-9a-z]+$|^osCsid=[0-9a-z]+&?(.*)$ [NC]
RewriteRule (.*) $1?%1 [R=301,L]

# case: language parameters

RewriteCond %{QUERY_STRING} ^(.+)?language=es(.*)$ [NC]
RewriteRule (.*) $1?%1 [R=301,L]

 

 

Espero que os sirvan estas líneas de código. Muy útiles para librarse de las variables de sesión en Oscommerce.

A veces me preguntan qué es &oscsid en oscommerce. Simplemente se trata del nombre de la variable de sesión. Cada vez que un usuario entra en la página se le asigna una variable. En esa variable se puede almacenar desde información del carrito de compra hasta comportamiento de usuario. Lo peor desde el punto de vista del posicionamiento es que esa variable se asigna a todo tipo de usuarios incluidos los bots. Por eso en este caso cuando entra el bot de Google se le añade esa variable en la url.
La forma correcta de librarse de ella cuando se comienza un proyecto en Oscommerce es ir a la función tep_href_link

Reemplazar :

return $seo_urls->href_link($page, $parameters, $connection, $add_session_id);

por :

return $seo_urls->href_link($page, $parameters, $connection, false); 

Si no quieres tener problemas con Google y canonical url debes fijar tu atención en como se crean en tu CMS.

Si te gusta ¡Compártelo!
  • Twitter
  • Facebook
  • email
  • StumbleUpon
  • Delicious
  • Google Reader
  • LinkedIn
  • Tumblr

2 Comentarios »

  1. manuel dice:

    Hola. Interesante articulo. Tenemos un problema similar en la web. Mi pregunta es ¿cual seria la solución si solo tienes la variable de inicio de sesión?.
    Gracias

    • SeoValencia dice:

      Pues con el primer caso ‘case: leading and trailing parameters’ debería solucionarse. Aunque creo que si es tu caso xxx.html&osCsid=xxx

      con poner:

      RewriteCond %{QUERY_STRING} ^(.+)&osCsid=[0-9a-z]+&(.+)$ [NC]
      RewriteRule (.*) $1 [R=301,L]

      debería funcionar

      recuerdo que lo hice así para un proyecto pero lo tengo comprimido y es algo tedioso consultarlo.

      Con el ftp abierto y editando el htaccess no deberías tardar más de 5 minutos en resolverlo.

Deja un comentario

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