En este artículo veremos que son y como utilizar las URL amigables.

El modo en que los sitios dinámicos pasan información de una página a otra suele ser añadiendo parámetros en la URL. Se generan así direcciones dinámicas dentro de un sitio que pueden parecerse algo a esto:

https://www.misitio.com/index.php?lang=es&cat=87&id=3755

El problema de las URL dinámicas

Url Amigables

Aunque muy prácticas (imprescindibles en algunos casos) estas direcciones plantean algunos problemas que deberemos tener en cuenta:

Desde el punto de vista del usuario resultan poco intuitivas, con lo que perdemos la oportunidad de conseguir que el visitante recuerde la página o que esta le de una idea del punto en el que se encuentra dentro de la arquitectura de la página.

Por otra parte, esto puede generar serios problemas en la indexación de la página. Muchos buscadores no son capaces de indexar estas URLs con variables, por lo que la saturación de páginas indexadas caerá drásticamente cuando utilicemos este tipo de URLs.

En otras ocasiones, el problema no es la indexación, sino la duplicidad que generan estas páginas. Lo veremos más claro con un ejemplo:

Supongamos una página multilengüaje: en inglés y castellano. Supongamos que ponemos una variable dinámica $lang, y dependiendo de su valor se cargará el texto de la página en castellano (si $lang=”es”) o en inglés (si $lang=”eng”).

Ahora bien, el diseñador web ha decidido que, cuando un visitante entre por primera vez (sin haber escogido un idioma (es decir, $lang no tiene valor aún), el idioma mostrado será el castellano.

Para los buscadores existen dos páginas idénticas. Esto incurre en una duplicidad de contenidos que, seguramente, acabará con la caida libre del sitio en el ranking de Google.

https://www.misitio.com/index.php

será identica a

https://www.misitio.com/index.php?lang=es

La solución: URL amigables

Una URL amigable es una URL que sustituye a aquella con un montón de parámetros y la convierte en algo inteligible, tanto para usuarios como para buscadores.

Así, una página como https://www.misitio.com/index.php?cat=muebles&art=sillaverde

sería sustituida por https://www.misitio.com/muebles/sillaverde

¿Cómo se generan URLs amigables?

De lo que se trata es de que cuando alguien solicite la página https://www.misitio.com/muebles/sillaverde, el servidor interprete que lo que tiene que mostrar es https://www.misitio.com/index.php?cat=muebles&art=sillaverde y se lo muestre a el usuario (visitante o robot de búqueda) de forma invisible.

El método que voy a explicar para conseguir generar estas URLs amigables supone que tengamos un servidor Apache y usemos PHP (lo cual es, por otra parte, la configuración más común) . Para ello vamos a editar el archivo .htaccess (que se encuentra en el directorio raíz de nuestro sitio)

Existen otrás maneras de conseguir URLs amigables, pero esta es, sin duda, la más extendida.

Lo primero que tenemos que hacer será asegurarnos de que en nuestro servidor tengamos habilitado el mod_rewrite en la configuración del PHP del servidor. Para comprobar si está habilitada puedes ejecutar un fichero php con el código:

<?php phpinfo(); ?>

Una vez que nos aseguramos de que nuestro servidor cumple los requisitos para utilizar URLs amigables, abriremos el fichero .htaccess para editarlo.

Lo primero que tenemos que hacer será añadir las siguientes lineas para habilitar el modo de reescritura de las urls:

Options +FollowSymLinks
RewriteEngine on

A continuación empezaremos a editar las reglas que ‘traducirán’ nuestras URLs.

No voy a extenderme demasiado en posibles sintaxis o variantes de direcciones que podremos resolver puesto que eso sería material para varios capítulos de un manual más extenso.

Sin embargo voy a explicar la ‘arquitectura’ básica de una regla de reescritura. Siguiendo el supuesto anterior:

Rewriterule ^(.*)/(.*)/(.*)$ $1.php/cat=$2&art=$3

Rewriterule indica al servidor que le va a definir una regla de reescritura al servidor

Los dos siguientes grupos representan la sitaxis de la dirección entrada (^(.*)/(.*)/(.*) $ ) y la estructura de la dirección dinámica ($1.php/cat=$2&art=$3)

Como podemos ver se han sustituido algunas partes de la URL dinámica por números precedidos del símbolo $. Esto es para indicarle que esas partes de la URL que hemos sustituido se utilizarán para la construcción de la URL amigable.

La url amigable se forma con expresiones regulares, que recomiendo encarecidamente que se revisen, puesto que son vitales para generar URLs amigables por este método.

Así, en este caso, se sustituirá el primer (.*) por el valor correspondiente a $1, el segúndo con el valor de $2,… y así sucesivamente.

Nuestra URL amigable quedaría de la siguiente forma:

https://www.misitio.com/muebles/sillaverde en vez de https://www.misitio.com/index.php?cat=muebles&art=sillaverde

Este no es más que un ejemplo sencillo, pero servirá de base para realizar otros muchos en distintos sitios dinámicos.

Para ampliar conocimientos sobre expresiones regulares os recomiendo:

 

5 Comentarios

  1. Andrea agosto 14, 2012 at 3:15 pm

    Y si tengo el mismo contenido tambien en ingles… ¿deberia crear una url amigable por cada idioma?
    Por ejemplo:
    https://www.misitio.com/muebles/sillaverde —>https://www.misitio.com/index.php?lang=es&cat=muebles&art=sillaverde
    https://www.misitio.com/furniture/greenchair —>https://www.misitio.com/index.php?lang=en&cat=muebles&art=sillaverde

    En este caso no tendria 4 urls al mismo contenido??

    • Foto del avatar
      Jesús Pernas Alonso agosto 14, 2012 at 10:03 pm

      El caso de un sitio multilingüe es un poco más complejo.

      Podrías (y deberías) hacer redirecciones de la url dinámica en español a una amigable en ese idioma, y lo mismo en inglés.

      Pero hay que tener en cuenta que aquí juega el factor multilenguaje (y en algunos casos también multiregional (variaciones de un idioma para distintas regiones)

      El caso del SEO en páginas multilíngües es, en si mismo, un área dentro del posicionamiento web. Hay gente especializada en este tipo de páginas.

      Lo que voy a explicar a continuación es simplemente un breve apunte sobre por dónde ‘van los tiros’. Espero poder escribir una artículo (o varios) en el que abordar el tema más en profundidad.

      Lo ideal es que utilices la reescritura de las direcciones para distinguir claramente los sitios en inglés y castellano y luego notificar a Google que uno es el sitio en inglés y el otro en español.

      Esto lo puedes hacer traduciendo la variable lang para convertir las direcciones en el tipo:

      https://www.misitio.com/es/muebles/sillaverde
      https://www.misitio.com/en/furniture/greenchair

      o mejor aún en:
      https://es.misitio.com/muebles/sillaverde
      https://en.misitio.com/furniture/greenchair

      Después le indicas a Google que https://en.misitio.com es el sitio en inglés y https://es.misitio.com es el sitio en español. Así, Google será capaz de mostrar como relevante la página en Español cuando el usuario busca en ese idioma (y en inglés si es el caso)

      Esto lo puedes hacer colocando

      &lt;link rel="alternate" hrelang="es" href="https://es.misitio.com" /&gt;

      en la cabecera de la página en inglés

      y

      &lt;link rel="alternate" hrelang="en" href="https://en.misitio.com" /&gt;

      en la página en español

      o si lo prefieres (yo lo prefiero) indicándoselo en el archivo sitemap.xml:

      &lt;url&gt;
      &lt;loc&gt;https://en.misitio.com &lt;/loc&gt;
          &lt;xhtml:link
              rel="alternate"
              hrelang="es"
              href="https://es.misitio.com"
          /&gt;
      &lt;/url&gt;
       
      &lt;url&gt;
      &lt;loc&gt;https://es.misitio.com &lt;/loc&gt;
            &lt;xhtml:link
              rel="alternate"
              hrelang="en"
              href="https://en.misitio.com"
          /&gt;
       &lt;/url&gt;

      Además, te aconsejo que trates cada uno como un sitio en Webmasters Tools. Así, podrás especificar una “Orientación Geográfica” distinga para uno y otro sitio.

      Pero, como ya he dicho antes hay que tener en cuenta muchas otras cosas que no puedo tratar en un simple comentario (y espero hacerlo en un artículo próximamente).

    • Foto del avatar
      Jesús Pernas Alonso agosto 14, 2012 at 10:07 pm

      Después de haber largado el ‘rollo’ de las páginas multilíngües he vuelto a leer tu comentario y me doy cuenta de que tal vez no te he respondido a lo básico:

      No se generan 4 urls con el mismo contenido. Las URLs generadas son las 2 amigables (una en inglés y otra en castellano).

      Las dinámicas se generan automáticamente, pero estas serán ‘invisibles para el usuario.

      El ‘truco’ está en que cuando enlaces a estas páginas lo hagas utilizando la URL amigable, y cuando generes Sitemaps lo hagas con las URLS amigables.

      Si ya existiesen enlaces a la URL dinámica y estos no los pudieses cambiar, la solución óptima pasará por generar una redirección 301 de la URL dinámica a la amigable.

  2. Marcos agosto 29, 2012 at 3:15 pm

    Estoy comenzando a integrarme en el ámbito del SEO, y quería preguntar, mas allá de que seguro es muy básica mi pregunta, si las funciones de las URL continúan realizando sus respectivas acciones pese a que cambian y se transforman en amigables, es decir, los id de la URL cumplen una función especifica en cuanto al funcionamiento del sitio y del contenido. Si se realiza esta transformación y se logran URL amigables, los id que ya no se verán mas en la barra de direcciones ¿Siguen funcionando con normalidad?.

    Gracias,
    saludos.

    • Foto del avatar
      Jesús Pernas Alonso agosto 30, 2012 at 4:38 pm

      Cuando se generan URLs amigables, lo que se hace en realidad es forzar para que cuando alguien pida la página amigable se ‘reescriba’ esta dirección de forma interna y muestre ‘el contenido’ (por así decirlo) que correspondería a la página con variables en la URL. Es decir, que lo que cambia son la URL por la que se solicita y la URL que se muestra en el navegador, pero no el contenido.

      Un ejemplo: si tienes una página que carga determinado texto dependiendo de la variable “content” en una capa, la dirección podría ser algo así como

      https://www.misitio.com/index.php?content=1

      si esto lo convertimos en

      https://www.misitio.com/contenido1/

      cuando alguien pida ver la esta página, el servidor lo ‘traducirá’ y sabrá quemostrarle.

      Para que te hagas una idea, la url amigable no hace que desaparezca la otra. De hecho, si escribes la dirección

      https://www.misitio.com/index.php?content=1

      se seguirá mostrando el contenido.

      Por eso es importante asegurarse de que siempre que enlacemos lo hagamos con la url amigable e incluso, sobre todo si la página no es nueva y lleva un tiempo funcionando con url dinámicas) realizar un redireccionamiento 301 (permanente) de la URL dinámica a la amigable.

Los comentarios están cerrados