Home
Head's Up: I'm in the middle of upgrading my site. Most things are in place, but there are something missing and/or broken including image alt text. Please bear with me while I'm getting things fixed.

The Quick And The Dead : Examining Fifteen Years Of Links

### Overview

I migrated my site to Next.js and, as part of the process, moved all my content files into MDX files in my Grimoire (aka my combination notes app, scratchpad, developers notebook, etc...). I wrote some scripts to find dead links during the migration. Figured I'd use the opportunity to pull some stats as well.

### The Breakdown

There were 1,367 pages on the site them I moved the content that break down link this :

### Links Per Year

< table > < thead > < tr > < th > Year < /th > < th > Links < /th > < th > Live < /th > < th > Dead < /th > < th > % Dead < /th > < /tr > < /thead > < tbody > < tr > < td > 2005 < /td > < td > 72 < /td > < td > 54 < /td > < td > 18 < /td > < td > 25% < /td > < /tr > < tr > < td > 2006 < /td > < td > 139 < /td > < td > 99 < /td > < td > 40 < /td > < td > 29% < /td > < /tr > < tr > < td > 2007 < /td > < td > 106 < /td > < td > 79 < /td > < td > 27 < /td > < td > 25% < /td > < /tr > < tr > < td > 2008 < /td > < td > 158 < /td > < td > 129 < /td > < td > 29 < /td > < td > 18% < /td > < /tr > < tr > < td > 2009 < /td > < td > 169 < /td > < td > 130 < /td > < td > 39 < /td > < td > 23% < /td > < /tr > < tr > < td > 2011 < /td > < td > 65 < /td > < td > 49 < /td > < td > 16 < /td > < td > 25% < /td > < /tr > < tr > < td > 2012 < /td > < td > 60 < /td > < td > 51 < /td > < td > 9 < /td > < td > 15% < /td > < /tr > < tr > < td > 2013 < /td > < td > 179 < /td > < td > 148 < /td > < td > 31 < /td > < td > 17% < /td > < /tr > < tr > < td > 2014 < /td > < td > 91 < /td > < td > 77 < /td > < td > 14 < /td > < td > 15% < /td > < /tr > < tr > < td > 2015 < /td > < td > 72 < /td > < td > 55 < /td > < td > 17 < /td > < td > 23% < /td > < /tr > < tr > < td > 2016 < /td > < td > 15 < /td > < td > 14 < /td > < td > 1 < /td > < td > 7% < /td > < /tr > < tr > < td > 2017 < /td > < td > 8 < /td > < td > 8 < /td > < td > 0 < /td > < td > - < /td > < /tr > < tr > < td > 2019 < /td > < td > 17 < /td > < td > 17 < /td > < td > 0 < /td > < td > - < /td > < /tr > < tr > < td > 2020 < /td > < td > 2,385 < /td > < td > 2,260 < /td > < td > 125 < /td > < td > 5% < /td > < /tr > < tr > < td > 2021 < /td > < td > 581 < /td > < td > 515 < /td > < td > 66 < /td > < td > 11% < /td > < /tr > < tr > < td > Total < /td > < td > 4,117 < /td > < td > 3,685 < /td > < td > 432 < /td > < td > 12% < /td > < /tr > < /tbody > < /table >

### Status Codes

< table > < thead > < tr > < th > Code < /th > < th > Status < /th > < th > Before Redirects < /th > < th > After Redirects < /th > < /tr > < /thead > < tbody > < tr > < td > N/A < /td > < td > Unreachable < /td > < td > 69 < /td > < td > 83 < /td > < /tr > < tr > < td > 200 < /td > < td > OK < /td > < td > 2,774 < /td > < td > 3,685 < /td > < /tr > < tr > < td > 204 < /td > < td > No Content < /td > < td > 10 < /td > < td > 10 < /td > < /tr > < tr > < td > 301 < /td > < td > Moved Permanently < /td > < td > 880 < /td > < td > - < /td > < /tr > < tr > < td > 302 < /td > < td > Found < /td > < td > 139 < /td > < td > - < /td > < /tr > < tr > < td > 303 < /td > < td > See Other < /td > < td > 5 < /td > < td > - < /td > < /tr > < tr > < td > 307 < /td > < td > Temporary Redirect < /td > < td > 12 < /td > < td > - < /td > < /tr > < tr > < td > 308 < /td > < td > Permanent Redirect < /td > < td > 24 < /td > < td > - < /td > < /tr > < tr > < td > 400 < /td > < td > Bad Request < /td > < td > 23 < /td > < td > 23 < /td > < /tr > < tr > < td > 401 < /td > < td > Unauthorized < /td > < td > 1 < /td > < td > 1 < /td > < /tr > < tr > < td > 403 < /td > < td > Forbidden < /td > < td > 80 < /td > < td > 96 < /td > < /tr > < tr > < td > 404 < /td > < td > Not Found < /td > < td > 90 < /td > < td > 198 < /td > < /tr > < tr > < td > 410 < /td > < td > Gone < /td > < td > 2 < /td > < td > 4 < /td > < /tr > < tr > < td > 451 < /td > < td > Unavailable For Legal Reasons < /td > < td > - < /td > < td > 1 < /td > < /tr > < tr > < td > 500 < /td > < td > Internal Server Error < /td > < td > 3 < /td > < td > 6 < /td > < /tr > < tr > < td > 503 < /td > < td > Service Unavailable < /td > < td > 5 < /td > < td > 9 < /td > < /tr > < tr > < td > 525 < /td > < td > SSL Handshake Failed < /td > < td > - < /td > < td > 1 < /td > < /tr > < /tbody > < /table >

### Notes

The absolute lack of posts in 2018 is not an error. I spent the entire year in a major bipolar depression. I wrote in my journal some. I'll be posting some of those entries retroactively.

In 2020, I started automatically pulling in the links I visit each day and posting them. That's why there is such a bump.

I'm surprised by the number of dead links in 2021, and, really 2020. I want to look at that more to figure out if something's up with my methodology or if those numbers are legit.

### Other Things To Look At

Some other ideas to update this post with (or use the next time I do this)

- Add the number of posts per year - Add number of pages with links per year - List the number of distinct domains and show a leaderboard - Show number of original http and https links pear year

### Wrapping Up

The scripts I used to find, scrub, and pull the link details are here

And, yeah. It's actually sixteen years of links, but fifteen sounds better in the title.