Implementar redirecciones en bulk con Python

Las redirecciones son un clásico dentro del mundo web y en concreto en el sector SEO. En un post anterior os mostré un script que he creado para comprobar redirecciones en bulk muy útil cuando hacemos una migración SEO de una sección concreta de la web o algo similar.

Hoy os quiero mostrar la fase previa de ese proceso de checking en el que vamos a implementar directamente nuestras redirecciones en el fichero .htaccess gracias a Python y en solo unos segundos. Se trata de un proceso muy simple que podéis utilizar todos, y es bastante útil si queremos prescindir de utilizar plugins o herramientas externas para aplicar estas redirecciones. Normalmente es un proceso que pedimos que implementen los desarrolladores pero con este proceso que os voy a mostrar es algo que sin duda podríamos aplicar nosotros mismos.

Vayamos por partes.

Fichero .htaccess

Doy por hecho que todos sabemos lo que es el fichero htaccess y tampoco quiero meterme demasiado en su descripción. Básicamente es el fichero que utilizamos para que el servidor se comporte de cierta forma ante determinados casos.

Un fichero .htaccess, también conocido como archivo de configuración distribuida, es un fichero especial, popularizado por el Servidor HTTP Apache que permite definir diferentes directivas de configuración para cada directorio sin necesidad de editar el archivo de configuración principal de Apache.

Fuente: Wikipedia

Para nuestro objetivo, tendrás que descargar tu fichero .htaccess en tu equipo local como un fichero .txt.

Para ello, dependerá del proveedor de hosting que tengas contratado pero normalmente podrás hacerlo desde cPanel > Gestor de archivos.

Importante: puedes tener tantos ficheros htaccess como directorios en tu web. Cada uno de ellos actuará según en la carpeta en la que lo tengas almacenado. Para este objetivo, el fichero htaccess que tienes que descargar es el que esté alojado en la raíz de tu web. Normalmente la ruta  de carpetas sería "public_html > nombre de dominio > htaccess"

Mapeo de redirecciones

Antes de nada, necesitamos tener disponible el mapeo de redirecciones en donde vamos a definir la URL de origen y la URL de destino. Sé que este proceso es el más tedioso ya que se puede dar el caso de tener que ir una por una definiendo cada redirección.

Importante: Para dejar listo el fichero que vamos a trabajar con Python, elimina cualquier tipo de encabezado de las columnas tipo "URL de Origen" y "URL de Destino". Deja solamente los valores de las URLs. También debes guardar el documento en formato CSV.

Trabajando el fichero .htacess con Python

Una vez tengamos los dos documentos en nuestro equipo local, con tan solo unas líneas de código de Python vamos a trasladar estas redirecciones a nuestro fichero .htacess, el cual subiremos actualizado después a nuestra web para que se apliquen estas redirecciones.

La directiva para definir redirecciones 301 individuales en el fichero .htaccess es muy simple:

redirect 301 /url_antigua.html https://www.dominio.com/url-nueva/

Nótese que la URL de origen se define como una ruta relativa a nuestro fichero .htacess y la URL de destino se define de forma absoluta.

En primer lugar, tenemos que abrir nuestro fichero de mapeo de redirecciones:

redirects = open('redirects.csv', 'r')

En segundo lugar, y dado que nuestro fichero es un CSV, podemos iterar cada una de las líneas como cualquier elemento iterable en Python:

for line in redirects:
    line = line.strip().split(';') #a cada línea le eliminamos valores extraños y las convertimos en listas
    htaccess = open('.htaccess.txt', 'a') #abrimos nuestro fichero .htaccess con el modo "a" para incluir líneas de texto después de las anteriores
    redirect = htaccess.write('\nredirect 301 ' + line[0].replace("https://seoalex.es", "") + ' ' + line[1]+'\n') #escribimos la directiva de redireccion utilizando las listas creadas previamente (url de origen y destino). En la URL de origen eliminamos el host puesto que deben ser URLs relativas

Cerramos nuestro fichero CSV:

redirects.close() #cerramos nuestro CSV al acabar la iteración

Código completo:

redirects = open('redirects.csv', 'r')

for line in redirects:
    line = line.strip().split(';') #a cada línea le eliminamos valores extraños y las convertimos a listas
    htaccess = open('.htaccess.txt', 'a') #abrimos nuestro fichero .htaccess
    redirect = htaccess.write('\nredirect 301 ' + line[0].replace("https://seoalex.es", "") + ' ' + line[1]+'\n') #escribimos la directiva de redireccion utilizando las listas creadas previamente (url de origen y destino)

redirects.close() #cerramos nuestro CSV al acabar la iteración

Como veis, el código no puede ser más simple, pero nos ayuda a trasladar en unos segundos todas las redirecciones a nuestro fichero .htaccess.

El resultado será tener un nuevo fichero .htaccess que queda así:

Finalmente tendrás que subir este nuevo .htaccess a tu web desde el gestor de archivos y podrás comprobar si las redirecciones se van aplicando.

Importante: Dado que en local hemos guardado y trabajado el fichero .htaccess como un fichero .txt, cuando lo subas a tu web se te guardará con la extensión ".txt". Tendrás que editarlo para quitarle esta extensión ya que sino no te funcionaría correctamente. 

Nota final

No siempre tendrás que definir redirecciones individualmente, y de hecho, siempre que puedas deberías evitarlo. La mejor opción es definir redirecciones a través de reglas, con RegEx por ejemplo. Sin embargo, cuando esto no sea posible, esta puede ser una opción para hacerlo rápidamente.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)

Sobre el autor

Alex Romero Lopez, Consultor SEO en España
Web Otros artículos del autor

Especialista SEO con gran foco en el área técnica. Entusiasta de la programación, en especial Python y Javascript, y la aplicación de ésta en el ámbito SEO para automatizar procesos o profundizar en ciertos ámbitos como el web scraping o el uso de APIs. He trabajado en proyectos SEO de muy diferente tamaño y sector lo que me permite obtener una perspectiva 360º de cómo trabajarlo.

Deja un comentario