SEO en Prestashop: el ID y las URLs amigables
Como hemos señalado en otras ocasiones, PrestaShop es, a día de hoy, uno de los CMS líderes para la creación y gestión de tienda online, pero todavía tiene algunas carencias en lo que a optimización SEO se refiere. Una de ellas está en la generación de URLs amigables. Las URLs de Prestashop llevan incluido un identificador (de ahora en adelante id) único para cada página. Por tanto, este id le sirve a PrestaShop para saber a qué producto/página/categoría/… se refiere.
Es cierto, que PrestaShop tiene dentro del menú Preferencias -> SEO + URLs la posibilidad de configurar estas urls, permitiendo cambiar el orden, pero siempre indicando la posición del id dentro de la url, y delimitado por caracteres fijos (-,_,__,…), para que sea capaz de “encontrar” este id para resolver el contenido a mostrar. Es decir, aunque la configuración por defecto de Prestashop sea mostrar el id antes del nombre del producto o categoría (/idxx-producto.html) podemos cambiarlo para que, al menos, ese id se muestre al final de la URL (/producto-idxx.html).
El problema está, cuando nos encontramos con la optimización de un sitio que ya está montado con la estructura predeterminada y que requiere de un cambio, y por consiguiente, de numerosas redirecciones.
Cómo cambiar las URL de Prestashop para que sean más amigables
Para empezar, usaremos el módulo de Apache mod_rewrite que permite reescribir urls, para conseguir urls amigables, y mejorar, con ello, la optimización SEO.
Las reglas de reescritura que emplearemos se escribirán en el fichero .htaccess de Apache.
Pero antes, recordemos un poco como funcionan los RewriteRules…
Si quisiéramos reescribir una solicitud de una dirección url, deberíamos escribir:
RewriteRule ^vieja\-url\.html$ nueva-url.html [L]
Esto mostraría el contenido de nueva-url.html de nuestro servidor web, cuando se haga una petición a vieja-url.html, siendo totalmente transparente para el usuario (devolviendo un 200).
Si por el contrario quisiéramos que fuera una redirección, podríamos usar las etiquetas de RewriteRule para indicarlo:
RewriteRule ^vieja\-url\.html$ nueva-url.html [L,R=301]
Lo bueno de las reglas RewriteRule es que podemos usar expresiones regulares para crear las reglas de reescritura, por lo que sólo tenemos que crear una expresión regular cuyo patrón coincida con las urls que queremos reescribir.
Como partimos de una web que ya está funcionando, y de la cual queremos cambiar algunas urls, sin perder el posicionamiento de las páginas ya indexadas, haremos redirecciones a las nuevas urls, sin perder el posicionamiento de las viejas, e indicando a los motores de búsqueda, que estas urls han cambiado.
Reescritura de productos en PrestaShop
En caso de que tuviéramos las urls de los productos como PrestaShop las configura por defecto, es decir: http://misitioweb/es/vestidos-informales/3-vestido-estampado.html y quisiéramos cambiar el id al final de la url, deberíamos añadir la siguiente regla en el .htaccess:
RewriteRule ^([a-zA-Z]*)/([a-zA-Z0-9-]*)/([0-9]+)\-([a-zA-Z0-9-]*)\.html$ $1/$2/$4-$3.html [L,R=301]
Pasando entonces a resolver las urls con el id delante del nombre del producto, como si estuvieran al final del mismo http://misitioweb/es/vestidos-informales/3-vestido-estampado.html -> http://misitioweb/es/vestidos-informales/vestido-estampado-3.html
Reescritura de categorías en PrestaShop
Con las categorías pasa algo similar a los productos, ya que el id, en la configuración por defecto de PrestaShop está delante del nombre de la categoría: http://misitioweb/es/3-mujer, y para cambiar estas urls y que estén detrás, deberíamos añadir la siguiente regla:
RewriteRule ^([a-zA-Z]*)/([0-9]+)\-([a-zA-Z0-9-]*)$ $1/$3-$2 [L,R=301]
Redirigiendo las peticiones a las viejas urls de categorías a las nuevas: http://misitioweb/es/3-mujer -> http://misitioweb/es/mujer-3
Al igual que hemos visto estas redirecciones, lo podemos hacer con las demás páginas de PrestaShop que necesitan el id, como: proveedores, fabricantes, páginas CMS o categorías CMS.
Resultado final del .htaccess tras los cambios
Con las reglas para los productos y las categorías que hemos hablado, quedaría así el fichero .htaccess:
RewriteEngine on RewriteBase /prestashop/1617/ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([a-zA-Z]*)/([a-zA-Z0-9-]*)/([0-9]+)\-([a-zA-Z0-9-]*)\.html$ $1/$2/$4-$3.html [L,R=301] RewriteRule ^([a-zA-Z]*)/([0-9]+)\-([a-zA-Z0-9-]*)$ $1/$3-$2 [L,R=301]
La explicación para el código anterior es:
- IfModule mod_rewrite.c: si existe el módulo mod_rewrite hacer lo siguiente
- RewriteEngine on: activa el motor de resscritura
- RewriteBase /: indica la base para reescribir las urls, en caso de estar instalada en la raíz del dominio, sería “/”, en caso contrario, la ruta que sea.
- RewriteCond %{REQUEST_FILENAME} !-f: si la petición coincide con un fichero no existente, continuar.
- RewriteCond %{REQUEST_FILENAME} !-d: si la petición coincide con un directorio no existente, continuar.
Hay que recordar, que cuando actualicemos PrestaShop o alguno de sus módulos, se puede generar un nuevo contenido para el fichero .htaccess, por lo que las modificaciones manuales que hagamos sobre este fichero, deberán hacerse antes o después de las líneas delimitadoras de PrestaShop en el mismo:
# ~~start~~ Do not remove this comment, Prestashop will keep automatically the code outside this comment when .htaccess will be generated again
y
# ~~end~~ Do not remove this comment, Prestashop will keep automatically the code outside this comment when .htaccess will be generated again
Recordad que todo esto deberá añadirse antes de la primera línea del .htaccess, para evitar que se borre con alguna de las actualizaciones de PrestaShop.
Comentarios
No hay comentarios todavía.