El error 503 aparece cuando hay una sobrecarga en nuestro servidor. El servidor se encuentra tan ocupado que no puede dar respuesta al navegador. Una vez transcurrido un tiempo, la conexión se cae.
Cuando accedemos a una página web el servidor siempre nos devuelve un código de estado http, estos errores son en su mayoría invisibles, salvo cuando tenemos un error 5xx o un 4xx. En este post vamos a explicar como manejar un error 503 sin que perjudique el SEO de WordPress.
Las causas son muy variadas, desde ataques DDoS hasta scripts ineficientes que sobrecargan innecesariamente el servidor por lo ineficientes que son. También a veces no tenemos correctamente configurado nuestro wordpress para manejar grandes volúmenes de tráfico.
En este artículo vamos a dar la solución según la posible causa. Buscando solucionar el problema de la manera más elegante y sobre todo cómo hacer para no perder SEO cuando esto te ocurra.
Lo primero que debemos hacer es averiguar si el error 503 es porque estamos siendo atacados o se trata de otro problema.
¿Cómo descubrir la causa del Error 503 en mi Servidor?
Si utilizas un hosting económico o un servidor compartido primero que debes verificar que no hayas superado los límites de tu plan. Lo más común es haber consumido el ancho de banda alguno otro límite de recursos establecido en nuestro plan de hosting.
Una de las causas más comunes puede ser un malware o un ataque DDoS que puede darnos muchos dolores de cabeza. Cuando un script malicioso se ejecuta, puede llegar a agotar todos los recursos del servidor.
Recomiendo descartar este problema en segundo lugar antes de buscar otra solución. Lo ideal es darnos acceso exclusivamente a nosotros mismos. De esta manera si continúa el error, podemos descartar, ataques o un picos de visitas.
<Limit GET HEAD POST> Order deny,allow Deny from all Allow from {AQUI VA DIRECCION IP} </LIMIT>
Si no ocurre nada y nuestra web funciona perfectamente, entonces nos quedan las opciones mas comunes:
Consumo excesivo de recursos en una web de alto tráfico
Cuando una publicación de nuestro blog se vuelve viral, normalmente sobrepasa el tráfico esperado y nuestro servidor puede llegar a colapsar. Si vemos que podemos entrar por ratos si y ratos no, lo mas probable es que esta sea la causa. Un truco que funciona muy bien en WordPress es reducir el consumo de recursos, desactivar el archivo wp-cron.php.
El archivo wp-cron.php se ocupa de; verificar las actualizaciones de plantillas y plugins instalados, envío de pingbacks, publicar artículos programados y realizar cualquier tarea programada en nuestro wordpress. ¿Y cómo funciona? Pues muy sencillo, el archivo se ejecuta cada vez que hay una visita en nuestro sitio web.
El problema está cuando un día de la nada, tenemos 5.000 visitas por minuto. El archivo se ejecutará 5.000 veces, realizando toda una serie de procesos que consumen memoria, cpu, etc. Si lo desactivamos podremos ahorrar una buena parte de los recursos del servidor. Lo único que tenemos que hacer es añadir esta línea a nuestro wp-config.php:
define('DISABLE_WP_CRON', true);
Y ya está. Ahora para no perder las publicaciones programadas o evitar que dejen de ejecutarse todas estas actividades de nuestra web, lo único que debemos hacer es un Cron-Job que lo podemos configurar desde el CPanel o bien si tenemos acceso SSH por la terminal de Linux.
Necesitas un Sistema de Caché
Ahora bien, el incremento de tráfico también es un motivo inevitable de sobrecarga. Hoy en día casi todos los sitios web utilizan algún sistema de caché que evita tener que volver a ejecutar consultas a la BD o ejecutar código una y otra vez para producir el mismo resultado.
En su lugar el caché lo que hace es reducir los procesos en el servidor entregando archivos HTML ya previamente procesados.
¿Plugins recomendados? Plugins de caché hay muchos, el uso de uno o de otro va a depender mucho del servidor de hosting donde se encuentre nuestra página web. En mi experiencia los que mejor me han funcionado han sido estos:
Si incluso utilizando caché y deshabilitando scripts para reducir las consultas a la BD, el servidor se cuelga y no responde, lo más aconsejable es recurrir a un VPS o un Server Dedicado.
Intento de hackeo desde una o varias IPs pueden causar error 503
Cuando digo varias, me refiero a un número razonable. Si estás recibiendo peticiones de más de 50 IPs distintas pudiera tratarse de un ataque DDoS. En ese caso mejor utilizar un servicio como cloudflare para proteger tu servidor de posibles ataques DDoS y otras amenazas.
Para comprobar si es esto lo primero que debemos hacer es revisar los logs del servidor, y comprobar si existen IPs que ocasionen el consumo excesivo. De ser este el caso, la solución es bloquear su acceso a la página web. Todo lo que tienes que hacer es añadir estas lineas al .htaccess
<Limit GET HEAD POST> order allow,deny deny from {AQUÍ LA DIRECCIÓN IP} deny from {OTRA DIRECCIÓN IP} deny from {OTRA DIRECCIÓN IP} allow from all </LIMIT>
Scripts Deficientes o Demasiados Plugins
En una ocasión un cliente me pidió que revisara su web porque la sentía demasiado «lenta». Mi sorpresa fue encontrar la web de WordPress con más plugins activos, que he visto en mi vida. Había como 100 activos y unos 200 inactivos. Una locura.
Creo que yo nunca he llegado a usar más de 50 plugins en un sitio web. Y eso es como que exagerando.
Yo recomiendo siempre, activar solo lo que se va a usar y lo que no, desactivarlo e incluso mejor, borrarlo. Principalmente aquellos que tienen una funcionalidad en el Front-End. Otra posibilidad es que uno de nuestros scripts esté consumiendo demasiada CPU del Servidor.
Existen herramientas (debuggers) que nos permiten comprobar la velocidad y buena performance del script, mostrándonos donde puede estar el error, si lo hubiera. Además, algunos sistemas de estadísticas que nos pueden señalar que página es la que más consumo produce, según esto podemos decidir deshabilitarla.
Demasiadas visitas de un Bot
Acá puede ocurrir 2 cosas:
- Un bot de Google indexando mucho contenido de nuestra web y tener un servidor limitado.
- Un bot malicioso, copiando contenido o escaneando demasiado para quien sabe para que fin.
En el primer caso debemos ser muy cuidadosos. Si el robot de google está pasando con mucha frecuencia, por nuestra web y esta causando problemas, entonces debemos reducir la frecuencia de rastreo. Para ello basta con ir a la consola de Webmasters de Google y cambiar la frecuencia de rastreo de nuestra web. Ahora bien si no se trata de un robot de google, yahoo o bing, podemos sospechar de un Bad Bot. Estos son bots utilizados para diversos fines. Para estoy hay varias formas de solucionar. Si conocemos el nombre del Bot, podemos limitar su acceso recurriendo al archivo robots.txt.
# bienvenidos User-agent: nombre-del-bot Disallow: /
Es muy importante asegurarse que no estamos limitando un el acceso a un buscador de google. Pues además de impedir el acceso, otra de las consecuencias es la desindexación de nuestro contenido de la Base de Datos del buscador. Y esto nos puede propiciar una enorme pérdida de tráfico por SEO.
La otra forma de solucionar y que yo la aplico en este blog, a es a través del plugin: Blackhole for Bad Bots. Este plugin se alimenta de una base de datos de Bots que son reportados como sospechosos o maliciosos y lo que hace es simplemente bloquearles el acceso. Si bien puede que existan otras causas, estas suelen ser las más comunes.
Mientras resolvemos esta situación debemos hacer algo para que para que google y otros robots que estén accediendo no nos penalicen.
503 service temporarily unavailable
Solución para no perder SEO
Cuando nos encontramos con un Error 503, a veces la solución puede demorar días. Por ejemplo, alcanzaste el límite de tu plan de hosting y no tienes presupuesto para cambiar a otro, por lo que debes esperar hasta el próximo mes. O puede que tengas un malware que requiere cierto trabajo de limpieza. Sea cual sea el caso, el problema es si google llega a nuestra web y no encuentra la página activa, puede pensar que el sitio web ya no existe. Con Google, una semana basta para quedar casi desindexado.
Dependiendo de la cantidad de páginas almacenadas en caché y la frecuencia de rastreo de nuestra web, nuestro posicionamiento puede verse afectado. Para evitar esto, debemos añadir en el archivo .htaccess el siguiente código para enviar a los bots a un archivo de error 503.php y decirle que regrese más tarde. Mientras que al usuario lo manda a una página de error 404:
Options +FollowSymLinks RewriteEngine On RewriteBase / RewriteCond %{HTTP_USER_AGENT} ^.*(Googlebot|Googlebot|Adsbot|Feedfetcher)-?(google|Image)? [NC] RewriteCond %{REQUEST_URI} !^/cgi-bin/error/503\.php [NC] RewriteRule .* /cgi-bin/error/503.php RewriteCond %{REMOTE_HOST} !^1\.1\.1\.1 RewriteCond %{REQUEST_URI} !^/cgi-bin/error/404\.php [NC] RewriteRule .* /under-development-explain.html [R=302,L]
Si utilizais CGI debeis de incluir este archivo 503.php para decirle a los robots de google que vuelvan a pasar dentro de 3600 segundo, 1 hora.
<?php ob_start(); header(’HTTP/1.1 503 Service Temporarily Unavailable’); header(’Status: 503 Service Temporarily Unavailable’); header(’Retry-After: 3600?); header(’X-Powered-By:’); ?> <!DOCTYPE HTML PUBLIC “-//IETF//DTD HTML 2.0//EN”> <html> <head> <title>503 Servicio Temporalmente no Disponible</title> </head> <body> <h1>503 Servicio Temporalmente no Disponible</h1> <p>El servidor se encuentra temporalmente fuera de servicio por tareas de mantenimiento o tiene problemas para atender su requerimiento. Por Favor intente mas tarde.</p> </body> </html>
La línea que contiene – header(’Retry-After: 3600?); – es la que le indica que regrese en 1 hora, podemos cambiar este valor si deseamos.