Cómo buscar los enlaces rotos de un sitio web

Escrito por picodotdev el .
planeta-codigo
Enlace permanente Comentarios

Ya tengamos un sitio web, una bitácora, o una aplicación web es recomendable comprobar cada cierto tiempo los enlaces rotos. Las páginas pueden desaparecer o cambiar de dirección y esto provocará páginas no encontradas en los enlaces que las referenciasen. Usando herramientas que automaticen la tarea podemos encontrar enlaces rotos de forma efectiva y rápida.

La web se basa en un conjunto de páginas donde unas hacen referencia a otras a través de enlaces. Unido a que las páginas que están bajo el control de los sitios referenciados pudiendo desaparecer o cambiar de dirección hace que las referencias puedan dejar de funcionar o necesitar una redirección, el mensaje que nos indicará el navegador es el conocido Página no encontrada o error 404 para indicar lo mismo. Que un sitio web contenga referencias a páginas ya no existentes hace que el usuario no encuentre lo que busque empeorando su experiencia de usuario y que los buscadores tienen en cuenta en el posicionamiento de los resultados de búsqueda. Por estos motivos es recomendable de vez en cuando rastrear los enlaces de un sitio web para buscar enlaces rotos cambiándolos por otros nuevos o eliminarlos, ya sean enlaces internos (hacia nuestro propio sitio) o enlaces externos (a otros sitios).

Comprobar enlaces rotos con herramientas web

Por enlaces o referencias consideramos tanto a páginas como a recursos de imágenes, estilos CSS, JavaScript u otros. Con que un sitio web contenga unas pocas decenas de páginas comprobar manualmente los enlaces se hace una tarea tediosa, que necesita mucho tiempo además de posiblemente no conseguir descubrir todos los enlaces rotos. Hay herramientas disponibles para comprobar los enlaces de forma automatizada. Algunas de estas que he usado recientemente en esta bitácora y con las que he encontrado numerosos enlaces han sido:

Después de introducir la dirección del sitio web, que con estas herramientas ha de estar accesible en internet, cada una de ellas nos informará de los enlaces rotos que encuentre indicándonos el enlace roto, el texto del enlace y en qué página está. Con esta información podemos corregir esos enlaces del sitio web, bitácora o aplicación. Después de usarlas hubiera dicho que no tenía tantos en está bitácora, me sirvieron para corregirlos.

Las ventajas de estas herramientas web sobre las siguientes con wget y LinkChecker es que no requieren instalar ningún software, las desventajas son que suelen tener una limitación en el número de páginas máximo que rastean y número errores de los que informam, sin embargo, no son excluyentes y utilizando varias da oportunidad de descubrir más enlaces rotos y errores.

W3C Link Checker

Comprobar enlaces rotos con wget

Si el sitio web no está accesible en internet o queremos encontrar enlaces rotos en el momento de desarrollo podemos usar el comando wget para que nos rastree los enlaces, cada petición que devuelva un código 404 será un enlace roto. En el archivo wget.log tendremos los resultados del rastreo.

1
2
$ wget –spider -o wget.log -e robots=off -r -p https://picodotdev.github.io/blog-bitix/

wget.sh
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
--2020-01-15 21:00:06--  http://xn--spider-vg0c/
Resolviendo xn--spider-vg0c (xn--spider-vg0c)... falló: Nombre o servicio desconocido.
wget: no se pudo resolver la dirección del equipo “xn--spider-vg0c”
--2020-01-15 21:00:06--  https://picodotdev.github.io/blog-bitix/
Cargado certificado CA '/etc/ssl/certs/ca-certificates.crt'
Resolviendo picodotdev.github.io (picodotdev.github.io)... 185.199.108.153, 185.199.109.153, 185.199.111.153, ...
Conectando con picodotdev.github.io (picodotdev.github.io)[185.199.108.153]:443... conectado.
Petición HTTP enviada, esperando respuesta... 200 OK
Longitud: 31602 (31K) [text/html]
Grabando a: “picodotdev.github.io/blog-bitix/index.html”

     0K .......... .......... ..........                      100% 37,1M=0,001s

2020-01-15 21:00:07 (37,1 MB/s) - “picodotdev.github.io/blog-bitix/index.html” guardado [31602/31602]

--2020-01-15 21:00:07--  https://picodotdev.github.io/blog-bitix/assets/favicon.ico
Reutilizando la conexión con picodotdev.github.io:443.
Petición HTTP enviada, esperando respuesta... 200 OK
Longitud: 9662 (9,4K) [image/vnd.microsoft.icon]
Grabando a: “picodotdev.github.io/blog-bitix/assets/favicon.ico”

     0K .........                                             100% 80,6M=0s

2020-01-15 21:00:07 (80,6 MB/s) - “picodotdev.github.io/blog-bitix/assets/favicon.ico” guardado [9662/9662]

--2020-01-15 21:00:07--  https://picodotdev.github.io/blog-bitix/assets/apple-touch-icon-144-precomposed.png
Reutilizando la conexión con picodotdev.github.io:443.
Petición HTTP enviada, esperando respuesta... 200 OK
Longitud: 4443 (4,3K) [image/png]
Grabando a: “picodotdev.github.io/blog-bitix/assets/apple-touch-icon-144-precomposed.png”

     0K ....                                                  100% 40,1M=0s

2020-01-15 21:00:07 (40,1 MB/s) - “picodotdev.github.io/blog-bitix/assets/apple-touch-icon-144-precomposed.png” guardado [4443/4443]
...
wget.log

wget es una herramienta con mútiples usos, otro uso que tiene es la de [descargar el contenido de un sitio web completo]

Comprobar enlaces rotos con LinkChecker

Otra opción es LinkChecker que además de comprobar los enlaces internos de un sitio web también tiene la opción de comprobar los enlaces del sitio web hacia a los externos. Un modo de ejecución es utilizando Docker con lo que no hace falta instalar nada localmente salvo Docker.

El siguiente comando comprueba los enlaces internos de un sitio web y los externos que contenga generando un archivo de trazas, linkchecker.log, con las comprobaciones de resultado correcto y erroneas. Con el registro de las erróneas es fácil corregirlas.

1
2
$ docker run --rm -it linkchecker/linkchecker --verbose --check-extern https://picodotdev.github.io/blog-bitix/ > linkchecker.log

linkchecker.sh
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
LinkChecker 9.4.0              Copyright (C) 2000-2014 Bastian Kleineidam
LinkChecker comes with ABSOLUTELY NO WARRANTY!
This is free software, and you are welcome to redistribute it
under certain conditions. Look at the file `LICENSE' within this
distribution.
Get the newest version at https://linkchecker.github.io/linkchecker/
Write comments and bugs to https://github.com/linkchecker/linkchecker/issues

Start checking at 2020-01-15 20:06:36+000

URL        `https://picodotdev.github.io/blog-bitix/'
Real URL   https://picodotdev.github.io/blog-bitix/
Check time 0.586 seconds
D/L time   0.002 seconds
Size       30.86KB
Result     Valid: 200 OK
10 threads active,    54 links queued,    1 link in  65 URLs checked, runtime 1 seconds

URL        `/blog-bitix/assets/favicon.ico'
Parent URL https://picodotdev.github.io/blog-bitix/, line 19, col 3
Real URL   https://picodotdev.github.io/blog-bitix/assets/favicon.ico
Check time 0.632 seconds
Size       9KB
Result     Valid: 200 OK

URL        `https://picodotdev.github.io/blog-bitix/sitemap.xml'
Parent URL https://picodotdev.github.io/blog-bitix/, line 16
Real URL   https://picodotdev.github.io/blog-bitix/sitemap.xml
Check time 0.912 seconds
D/L time   0.051 seconds
Size       90.27KB
Result     Valid: 200 OK
...
URL        `http://barrapunto.com/'
Name       `Barrapunto'
Parent URL https://picodotdev.github.io/blog-bitix/pages/links/, line 262, col 5
Real URL   http://barrapunto.com/
Check time 0.260 seconds
Result     Error: ConnectionError: HTTPConnectionPool(host='barrapunto.com', port=80): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f45343fac10>: Failed to establish a new connection: [Errno ...
...
linkchecker.log

Comprobar enlaces rotos de otros sitios web hacia el nuestro

Lo anterior nos sirve para detectar los enlaces rotos que tenemos en nuestro sitio hacia otros, seguramente también nos interesará conocer los enlaces rotos que tienen otros sitios hacia el nuestro. Podemos saber a que páginas no encontradas están accediendo los usuarios de nuestro sitio web lanzando un evento personalizado de Google Analytics en la página para el error 404 que mostremos. Dado que los enlaces hacia nuestro sitio incluidos en otros no podemos modificarlos si se tratase de alguno especialmente importante al menos podremos hacer una redirección para que los usuarios lleguen al contenido más apropiado en vez de a una página no encontrada:

1
2
ga('send', 'event', 'error', '404', window.location.pathname);

analytics.js

Al mismo tiempo validar el HTML y validar los estilos CSS respecto a su especificación también mejorarán el código del sitio web.

Comparte el artículo: