July 25, 2026 · Updated August 11, 2026

We followed 657,607 links from 2009–2014. 77% no longer load.

An old 0.mk database backup held 657,958 links created between 2009 and 2014, along with their click counts. We restored 657,607 of those records as pre-2015 links and followed every destination in August 2026. Of 655,178 safe, crawlable link records, 76.7% no longer returned a loading page.

Most 0.mk users were in Macedonia, so this is not a census of the entire web. It is a large surviving record of what one online community shared during that period, including local news, personal blogs, photo hosts, forums, and the major platforms of the time.

When 0.mk started in 2009, three people worked on it for a few hours around their other work; none of them worked on it full time. Years later, one of them stumbled across the old database backup on a disk he had kept and decided to reboot the service.

Here is what those six years of link creation look like, with the long silence after them:

2009: 3,668 links20094k2010: 20,283 links201020k2011: 103,053 links2011103k2012: 23,148 links201223k2013: 224,931 links2013225k2014: 282,524 links2014283k2026: 404 links2026404
Raw link records, not users. The 2011 spike includes one 83,398-link batch; 97.8% of 2013 records and 99.9% of 2014 records are not attached to a recovered account. The green sliver is the 2026 relaunch.

The survival test

This is no longer an estimate from a sample. The crawl covers all 657,607 restored link records dated through December 2014. We excluded 2,429 records whose targets were malformed, internal, credentialed, or policy-blocked, leaving 655,178 crawlable historical links:

Could not connect: 51.24%HTTP error: 25.44%Loaded: 23.32%
51.24% could not connect (DNS, timeout, TLS)25.44% http error (4xx / 5xx)23.32% loaded (2xx / 3xx response)

And that 23.3% is generous: it counts pages that redirect to a login wall, a parked domain with ads, or a "this content is no longer available" notice as alive. A working HTTP response does not necessarily mean the original page survived.

Why 657,607 links but 494,781 URLs? Multiple short links sometimes point to the exact same destination. There are 162,826 such repeat records. Counting each destination once leaves 494,781 distinct URLs, of which 492,620 were crawlable. Only 21.3% of those loaded; 78.7% did not. The record-level and unique-URL views tell the same story, so duplicate destinations are not creating the result.

At the unique-URL level, 55.0% failed at the network layer after retrying uncertain results from a second network, and 23.7% returned an HTTP error. The most common HTTP result was 404, across 76,403 distinct URLs. Another 29,663 returned 403 or 429; those pages did not load for the crawler, but may be blocking automated requests rather than missing. That is why the headline says what loaded, not that everything else is definitively gone.

Counting hosts provides another check. Of 133,605 crawlable hostnames, only 34,827, or 26.1%, had even one URL return a loading page. The other 98,778 had none.

2009
URLs
64.58%
Hosts
61.53%
2010
URLs
60.39%
Hosts
60.36%
2011
URLs
92.53%
Hosts
61.74%
2012
URLs
59.43%
Hosts
62.46%
2013
URLs
75.06%
Hosts
75.24%
2014
URLs
78.16%
Hosts
75.45%
Share with no loading page in the complete crawl. URL-level results count every distinct path; host-level results count each hostname once.

The 2011 split explains the strange annual totals. One account created 83,398 distinct links to pelaphptutorials.com. At URL level, 92.5% of 2011 destinations did not load. Count that host once and the figure is 61.7%, almost identical to 2010 and 2012.

So nothing unusual happened to ordinary usage in 2012. Remove that one batch and 2011 falls from 103,053 records to 19,655; 2012 had 23,148. The later jump is different again: almost all 2013–2014 records are anonymous in the recovered data, and three quarters of their hostnames have no loading URL. Raw link volume is not a user-growth curve.

Many of the recognizable survivors are giants: YouTube, Wikipedia, and Google properties. Personal blogs, forums, local news sites, and photo hosts appear throughout the unavailable set. The centralized web has generally held up better than the small web.

A walk through the graveyard

The database reads like a museum of the 2010s internet. Some residents, with the number of links pointing at them:

Facebook photo CDN (fbcdn.net), none loaded835 links
Google Code, now redirects many URLs to its archive803 links
PureVolume, the old service is gone but its domain responds796 links
Rapidshare, no URL loaded139 links
Megaupload, no URL loaded71 links
Picasa Web Albums, no URL loaded69 links

People shared Facebook photos as direct CDN links; none of the 789 distinct fbcdn.net URLs behind those 835 records loaded. Yet PureVolume now returns pages for 633 of 653 distinct URLs, and Google Code loads or redirects 628 of 754. The original services are gone, but their domains respond. Again: an HTTP response is not the same as preserved content.

The Macedonian layer

0.mk was the first Macedonian URL shortener, so the data is also a record of a national web that partly no longer exists. The links point to A1 Television (shut down 2011), and to the newspapers Utrinski Vesnik, Dnevnik, and Vest, all of which stopped publishing in 2017. Hundreds of links to local news that can no longer be read anywhere except, sometimes, the Internet Archive. The short links outlived the newsrooms.

The gems

Seventeen years of other people's bookmarks contain some treasures:

The first link ever shortened (July 14, 2009, 3:52 AM) was not a manifesto or a launch post. It was a CSS stylesheet on someone's WordPress blog. Two clicks, ever. Empires begin humbly.

On day two, someone shortened localhost. 0.mk/localhost pointed at http://127.0.0.1/. It got two clicks, each of which sent the visitor to their own machine. The shortest URL for the loneliest destination.

The shortest link points at the longest domain. 0.mk/1 has recorded 10,415 clicks while pointing to thelongestlistofthelongeststuffatthelongestdomainnameatlonglast.com, a 2000s curiosity that is itself now gone. Four characters pointing at sixty-three, for 17 years.

The longest URL we ever shortened is 38,753 characters, a 2012 CodePen link whose query string literally repeats TRYING_THE_MAXIMUM_URL. Someone was testing us. We passed, and we still have their test.

4,478 of our links point at other URL shorteners: bit.ly, TinyURL, goo.gl. A short link to a short link, twice the fragility. Google shut goo.gl down in 2025, so every one of those is now a chain with a missing middle: our half still works, and points at a service that no longer resolves. Link rot squared.

And the immortal one: 0.mk/7, created July 15, 2009, points at google.com. 95,999 clicks and counting, and it still points there today, seventeen years and one resurrection later.

Why 0.mk came back

By 2014, 0.mk's revenue did not cover hosting or the work required to keep it running. Spam was constant. Filtering it meant more engineering, and abuse reports needed someone to review them. The original team closed the service.

AI can now do much of that work, which made the reboot practical. It handles most development, spam detection, abuse review, support, and monitoring. The human owner still controls the service and can intervene. The recovered links now run from edge machines in 300+ cities. More about how that works is here.

Methodology: every restored link record dated before January 1, 2015 was included; all relaunch-era links were excluded. Exact destination strings were deduplicated before fetching. Requests used an identifiable browser user agent, read at most 32 KiB, followed at most five manually validated redirects, and allowed one in-flight request per host. Private, local, and unsafe addresses were never contacted. DNS, timeout, TLS, and other network failures were retried from a separate VPS. HTTP 2xx/3xx counts as loading; 4xx/5xx is reported separately from transport failure. The recovered backup has 657,958 legacy rows; this analysis covers the 657,607 restored pre-2015 link records. The other 351 rows are unlinked collisions or fall outside that cohort. The raw database stays private (old URLs contain personal things people never meant to publish), but journalists and researchers can ask for aggregated numbers and charts. And if you think we should build a proper public archive view, vote for it.