¿Por qué deberías usar Python para SEO?

Python se ha convertido en el lenguaje de programación más utilizado del momento, arrebatándole el puesto a Java. Y esto no es casualidad, ya que es ampliamente utilizado por miles de programadores (y no tan programadores) en el mundo para gestionar o analizar grandes cantidades de datos, entre otras cosas. Pero antes de ver las aplicaciones en SEO, empecemos por el principio.

¿Qué es Python?

Python es un lenguaje de alto nivel, y ¿qué significa esto? Los lenguajes de programación de alto nivel se caracterizan por consumir más recursos que los lenguajes de bajo nivel, pero, a cambio, los algoritmos se escriben de una forma más parecida a la de la escritura humana. Vamos, que son más fáciles de entender. Y si algo caracteriza a Python es justamente eso: su simpleza.

Es gracias a esta simpleza que este lenguaje es muy sencillo de aprender. Pero que no te engañe: detrás de esa sencillez se esconde uno de los lenguajes más versátiles. El código de Python fue diseñado con el objetivo de ser simple, legible y accesible, incluso para gente que no está acostumbrada a programar.

¿Por qué deberías utilizar Python para SEO?

Python es perfecto para SEO gracias a la simplicidad de su código. Pero lo que todavía no te he contado es que tiene muchas librerías que nos van a ayudar a hacer tareas como:

  • Automatizar tareas repetitivas: Muchas de las actividades de un SEO, como la extracción de datos o el análisis de palabras clave, son tareas que se podrían simplificar utilizando scripts que automatizan y simplifican estos trabajos.
  • Analizar grandes cantidades de datos: Hay librerías diseñadas para procesar grandes volúmenes de datos (Pandas, NumPy, etc.) y nos pueden ayudar a detectar patrones, inconsistencias, y errores, facilitándonos así la toma de decisiones.
  • Scrapear webs: También existen librerías diseñadas exclusivamente para recorrer y extraer datos de una o varias páginas web. Bibliotecas como Beautiful Soup o Scrapy están justamente hechas para cumplir este propósito.
  • Flexibilidad: Gracias a la versatilidad que nos dan todas estas librerías, podemos crear soluciones personalizadas a problemas específicos que puedan surgir en nuestro proyecto.

Veamos un par de ejemplos

Vamos a ver un par de ejemplos de código que pueden ayudarnos a hacernos una idea de lo sencillo y rápido que resulta programar en python y en cómo podemos aplicarlo en nuestro proyectos.

Comprobar estatus de nuestras webs

Por ejemplo, pongamos que una web va a lanzar una campaña de descuento y esperamos que la web reciba un pico alto de tráfico. No podemos estar todo el rato comprobando que la web sigue en pie, por lo que decidimos crear un pequeño script que cada 10 minutos verifica si la web sigue activa.

Para ello primero vamos a importar las librerías necesarias, en nuestro caso:

import requests
import time

Después ponemos la url que queremos analizar y la guardamos en un string

# URL de la web a comprobar
url = "https://seocom.agency/"

Una vez hemos definido la URL a comprobar, programamos la función que comprobará y devolverá el estatus de la página. Simplemente lanzamos una solicitud HTTP y comprobamos que el estatus es de 200.

# Función para comprobar el estado de la web
def check_status():
   try:
       # Realizar la solicitud HTTP
       response = requests.get(url, timeout=10)
      
       # Verificar el código de estado HTTP
       if response.status_code == 200:
           print(f"[{time.ctime()}] La web funciona perfectamente: {url}")
       else:
           print(f"[{time.ctime()}] ¡Atención! La web responde con el código  {response.status_code}: {url}")
   except requests.exceptions.RequestException as e:
       # Capturar error si la web no responde
       print(f"[{time.ctime()}] ¡Error! No se puede acceder a la web: {url}. Más información
: {e}")

Ahora definimos el intervalo de tiempo que queremos esperar entre petición y petición en segundos. En nuestro caso 10 minutos, que serían 600 segundos.

# Intervalo de comprobación.
intervalo = 600 # 10 minutos = 600 segundos

Y para finalizar programamos el bucle que comprobará el estatus y después esperará 10 minutos hasta volver a hacerla. 

# Bucle para realizar la comprobación periódicamente
while True:
   check_status()
   time.sleep(intervalo)

Una vez ejecutado, este código nos mostrará este log de la terminal cada 10 minutos:

[Tue Dec  3 12:36:53 2024] La web está en pie: https://seocom.agency/
[Tue Dec  3 12:46:53 2024] La web está en pie: https://seocom.agency/
[Tue Dec  3 12:56:53 2024] La web está en pie: https://seocom.agency/

¿Lo mejor? Es que podemos escalar esto hasta donde queramos. Por ejemplo podemos usar la librería smtplib y programar que si la web no es accesible nos envíe un correo electrónico para avisarnos de que algo no va bien. 

Vamos a hacerlo. Para ello, como os he explicado antes, añadimos la librería de smtplib y también importamos MIMEText (Multipurpose Internet Mail Extensions). Esta es una librería estándar de python y se utiliza para crear el contenido de un mensaje de correo electrónico. Por lo que el contenido quedaría así:

import requests
import time
import smtplib
from email.mime.text import MIMEText

Después configuramos el servidor y el correo de envío.

# Datos de la cuenta de correo electrónico y configuración del servidor SMTP
email_sender = "email@gmail.com" # Correo electrónico desde el que se enviará la alerta
email_password = "contraseña" # Contraseña de la cuenta de correo
email_receiver = "email@gmail.com" # Correo electrónico del destinatario
smtp_server = "smtp.gmail.com" # Servidor SMTP de Gmail
smtp_port = 465  # Puerto de Gmail para SSL


# Función para enviar un correo electrónico
def send_email_alert(subject, body):
   try:
       # Crear el mensaje de correo electrónico
       msg = MIMEText(body) # Crear el mensaje de texto plano
       msg['Subject'] = subject # Asignar el asunto del mensaje
       msg['From'] = email_sender # Asignar el remitente del mensaje
       msg['To'] = email_receiver # Asignar el destinatario del mensaje
      
       # Enviar el mensaje de correo electrónico
       with smtplib.SMTP_SSL(smtp_server, smtp_port) as server:
           server.login(email_sender, email_password) # Hacemos login en nuestro correo
           server.sendmail(email_sender, email_receiver, msg.as_string()) # Enviamos el correo
      
   except Exception as e:
       print(f"[{time.ctime()}] Error al enviar el correo electrónico. Más información: {e}")

Y modificamos la función que comprueba el status para que si la web está caída nos mande un correo electrónico:

# Función para comprobar el estado de la web
def check_status():
   try:
       # Realizar la solicitud HTTP
       response = requests.get(url, timeout=10)
      
       # Verificar el código de estado HTTP
       if response.status_code == 200:
           print(f"[{time.ctime()}] Website is up: {url}")
       else:
           subject = f"ALERT: Website down with status {response.status_code}"
           body = f"The website {url} returned status code {response.status_code} at {time.ctime()}."
           print(subject)
           send_email_alert(subject, body)
   except requests.exceptions.RequestException as e:
       # Capturar error si la web no responde
       print(f"[{time.ctime()}] ¡Error! No se puede acceder a la web: {url}. Más información: {e}")
       subject = "¡Error!"
       body = f"¡Error! No se puede acceder a la web: {url}. Más información: {e}"
       print(subject)
       send_email_alert(subject, body)

Y ya podemos ejecutar nuestro nuevo script. Y este será el resultado:

Tener en cuenta que para hacer la prueba he forzado que se envíe email cuando el código que devuelve la página es 200. Este sería el código completo:

import requests
import time
import smtplib
from email.mime.text import MIMEText

# URL de la web a comprobar
url = "https://seocom.agency/"

# Datos de la cuenta de correo electrónico y configuración del servidor SMTP
email_sender = "email@email.com" # Correo electrónico desde el que se enviará la alerta
email_password = "tu_contraseña" # Contraseña de la cuenta de correo
email_receiver = "email@email.com" # Correo electrónico del destinatario
smtp_server = "smtp.gmail.com" # Servidor SMTP de Gmail
smtp_port = 465  # Puerto de Gmail para SSL

# Función para enviar un correo electrónico
def send_email_alert(subject, body):
   try:
       # Crear el mensaje de correo electrónico
       msg = MIMEText(body) # Crear el mensaje de texto plano
       msg['Subject'] = subject # Asignar el asunto del mensaje
       msg['From'] = email_sender # Asignar el remitente del mensaje
       msg['To'] = email_receiver # Asignar el destinatario del mensaje
      
       # Enviar el mensaje de correo electrónico
       with smtplib.SMTP_SSL(smtp_server, smtp_port) as server:
           server.login(email_sender, email_password)
           server.sendmail(email_sender, email_receiver, msg.as_string())
      
   except Exception as e:
       print(f"[{time.ctime()}] Error al enviar el correo electrónico. Más información: {e}")

# Función para comprobar el estado de la web
def check_status():
   try:
       # Realizar la solicitud HTTP
       response = requests.get(url, timeout=10)
      
       # Verificar el código de estado HTTP
       if response.status_code == 200:
           print(f"[{time.ctime()}] Website is up: {url}")
       else:
           subject = f"ALERT: Website down with status {response.status_code}"
           body = f"The website {url} returned status code {response.status_code} at {time.ctime()}."
           print(subject)
           send_email_alert(subject, body)
   except requests.exceptions.RequestException as e:
       # Capturar error si la web no responde
       print(f"[{time.ctime()}] ¡Error! No se puede acceder a la web: {url}. Más información: {e}")
       subject = "¡Error!"
       body = f"¡Error! No se puede acceder a la web: {url}. Más información: {e}"
       print(subject)
       send_email_alert(subject, body)

# Intervalo de comprobación.
intervalo = 600 # 10 minutos = 600 segundos

# Bucle para realizar la comprobación periódicamente
while True:
   check_status()
   time.sleep(intervalo)

Conclusión

Como hemos podido comprobar, Python es sin duda un aliado para el SEO. Nos ayuda a automatizar y a ahorrar tiempo. Esto que hemos visto no es más que un ejemplo de todo lo que podemos hacer con este lenguaje de programación. Desde la automatización de auditorías hasta el análisis de datos, las aplicaciones de este lenguaje son infinitas. 

¿Has usado Python alguna vez?