I’m sure different people picture different things when they think about webrings, so let me clarify what I picture. I see an element on a website that:
- Signifies this site is part of a webring
- Allows you to move to the next or previous site of the webring
- Maybe has other functionality like going to a “random” site or seeing the complete list
But then another major thing:
- Site owners don’t have to do much. They just plop (it?) on the site and a functional webring UI is there.
So like this:

How did it used to work? You know what? I have no idea. My guess is that it was an ancient <frameset><frame /></frameset>
situation, but this stuff is before my time a bit. How might we do this today?
Well, we could use an <iframe>
, I guess. That’s what sites like YouTube do when they give “embed code” as an HTML snippet. Sites like Twitter and CodePen give you a <div>
(or whatever semantic HTML) and a <script>
, so that there can be fallback content and the script enhances it into an <iframe>
. An <iframe>
might be fine, as it asks very little of the site owner, but they are known to be fairly bad for performance. It’s a whole document inside another document, after all. Plus, they don’t offer much by the way of customization. You get what you get.
Another problem with an iframe is that… how would it know what site it is currently embedded on? Maybe a URL parameter? Maybe a postMessage
from the parent page? Not super clean if you ask me.
I think a Web Component might be the way to go here, as long as we’re thinking modern. We could make a custom element like <webring-*>
. Let’s do that, and make it for CSS sites specifically. That’ll give us the opportunity to send in the current site with an attribute, like this:
<webring-css site="http://css-tricks.com">
This is gonna boot itself up into webring in a minute.
</webring-css>
That solves the technology choice. Now we need to figure out the global place to store the data. Because, well, a webring needs to be able to be updated. Sites need to be able to be added and removed from the webring without the other sites on the webring needing to do anything.
For fairly simple data like this, a JSON file on GitHub seems to be a perfectly modern choice. Let’s do that.

Now everyone can see all the sites in the webring in a fairly readable fashion. Plus, they could submit Pull Requests against it to add/remove sites (feel free).
Getting that data from our web component is a fetch away:
fetch(`https://raw.githubusercontent.com/CSS-Tricks/css-webring/main/webring.json`)
.then((response) => response.json())
.then((sites) => {
// Got the data.
});
We’ll fire that off when our web component mounts. Let’s scaffold that…
const DATA_FOR_WEBRING = `https://raw.githubusercontent.com/CSS-Tricks/css-webring/main/webring.json`;
const template = document.createElement("template");
template.innerHTML = `
<style>
/* styles */
</style>
<div class="webring">
<!-- content -->
</div>`;
class WebRing extends HTMLElement {
connectedCallback() {
this.attachShadow({ mode: "open" });
this.shadowRoot.appendChild(template.content.cloneNode(true));
fetch(DATA_FOR_WEBRING)
.then((response) => response.json())
.then((sites) => {
// update template with data
});
}
}
window.customElements.define("webring-css", WebRing);
The rest of this isn’t so terribly interesting that I feel like we need to go through it step by step. I’ll just blog-sketch it for you:
- Pull the attribute off the web component so we can see what the current site is
- Match the current site in the data
- Build out Next, Previous, and Random links from the data in a template
- Update the HTML in the template
And voilà!
Could you do a lot more with this, like error handling, better design, and better everything?
Yes.
All of this is cool, and a quick Google search told me that
But why would they need a webring? Was it pro-2000 alternative to a Facebook group or something?
I’m 14, btw. I didn’t co-exist with webrings…
They pre-date me too, a bit, and I’m 40. I think it was more about being pre-GOOGLE, even. Like a webring would have perhaps a primary way to find other related sites, since there wasn’t a reliable way to search or browse otherwise, especially for super-niche things. I’m sure the real story is more interesting and nuanced though.
The web is vastly different now compared to then. The web is now mostly a few large sites, social media and some blogs.
But back in the day, before Google told us what websites we should look at, there were thousands upon thousands of random sites and it was hard to find some of them.
Webrings were a great way to find new sites about things you were interested in.
If you were into camping (for example), you would hop onto a Camping webring and find all kinds of great content.
Now it’s all about who dances the Google’s rules the best. But make no mistake: there are still millions of awesome sites out there that you will never know about because Google is not really that interested in letting you know about them.
When I’m thinking of webrings, I’m transported back to a time when sites were “Best viewed in Internet Explorer”, and
<blink>
– and<marquee>
-tags ruled the web! (in a way, they still do on news-sites where every story is “breaking” – and JavaScript mimics blink and marquee!)I really like the idea of using Web Components, but can they be “distributed” as easy as an iframe-embed-code?
Good question. Check this out:
I’d say if you chuck the web component on npm, it gets pretty darn easy.
Seems interesting… I wonder what this would look like if it also used portals, and I’m curious to see if this could be truly brought back.
Hey! Not only did I build a webring recently (https://sidebar.io/blog/lets-bring-webrings-back), CSS-Tricks is even part of it! Here’s its banner (I went with SVG instead of web components):
https://sidebar.io/webring/banner/yxft.svg?color=FF8A00
Which you can embed with
I used a good old database to store the site list but fetching the JSON directly from GitHub is pretty cool!
This is so smart! Brilliant idea!
I was a member of about 2 dozen webrings around 1999. Getting websites into a search engine was a bit more complicated than it is now and was one of the reasons webrings were invented and why websites sometimes had a page full of helpful or interesting links to other sites. The web was made up of mostly amateur sites on free webhosts, most of the sites I used anyway, and things like that helped us all.
It was a bit more complicated than adding an iframe. The webring organizer would give you a name or number for your site and some code. You put the code on your page, changed the relevant bits with your name or number and voila. The code was different for each type of webring, you might get an image map, table, JavaScript, sometimes even a Perl script.
At one time there were 20 providers and around 80,000 different rings but they were all running into problems by 2005 as sites just disappeared or lost interest.
Some like RingGo, RingSurf and WebRingo still have their main page up, but almost every link to the various sites are dead.
The biggest system was WebRing which got bought by Yahoo who ruined it – https://www.salon.com/2001/12/05/webring/
Have you seen weirdwidewebring.net?
They have the site post “prev”, “next” links to the webring, and it seems like it redirects based on the position the referring site is in the webring. Clever!
Interesting post. Not a lot of people know and discuss webrings.
Ah the good ol days… When geocities still was around and so was dun. Web rings were an easy way to visit sites with the same info / same niche. If I recall right they were vetted by us mods too.. But that was 20+ yrs ago..
Let’s not forget guestbooks too! Same timeframe ;)
Next week – how to create a spinning email icon using Microsoft GIF Animator https://web.archive.org/web/20180603060628/http://gwanderson.server101.com/Computer101/gifAnimate.htm :)
neocities.org is up now and has a ton of fun sites. It’s also fully free, no ads, nothing, just supported by voluntary donations.
So, really, geocities is still up, as neocities is the same thing. I like getting lost on fun, creative, unique websites there.
I might make one soon, it’s free after all!
I’m 36. I used Webrings, primarily, as a child, since search engines were still in research and development phases. They made finding web pages very fun. What’s nice is that the main page for the Webring was run by admins that had to maintain their linked lists by checking on the web pages within the ring. You had to apply and have your webpage approved to be a part of the ring.
For the uninitiated, Web Rings were (and are!) a way to brag about the fact that you had friends. It was a way to keep up with other website builders. Being part of a ring was like self-curation, like joining a neighborhood watch. You trust that your neighboring web sites will be good places to also hang out, and if you don’t then you leave the ring. The way you ensure that is by being active in ring discussions. Right now I’m joining more and more discord channels and unlike Twitter or Facebook groups, there’s zero public facing element to that. Some of us have web sites! One way we’re thinking of showing that we have a common interest is by embracing webrings again. Especially among web designers, it’s a way to link directly to each other instead of every darn thing being shared on social media. Hopping around a good web ring is like checking out someone’s really good collection of books without being interrupted.
Web rings used /CGI-BIN which is why at the time not everyone could run their own. Hosting that supported PERL server side was still too expensive for most casual site owners.
‘Monetization’ ruined the internet. Thanks VC captial, and FAANG
I began using the internet on WebTV in 1998. So I go way back with Webrings and I loved ’em. I’d like to see ’em brought back in a different way. I learned HTML and some Javascript and created graphics, animations and Websites on WebTV, so I learned from the ground up “hand-coding” and creating. That inspired me to go to college and today I’m a Web Designer/Developer and work on a Mac. It needs to be modernized for sure and what got me to thinking about webrings again is because of link building in terms of SEO. Maybe go with a different name instead of ‘webring’ a different approach, different method and delivery.
In the old days (90s) the search engines at the time were not all that great, webrings provided a cool way to find other sites related to a specific niche.
Rememer Yahoo started as a link directory, that’s it. One massive link directory was how they got famous.
I’m 60, so I predate webrings. D’Oh!
I’m a dog trainer (which is actually #peopletraining) and I need a webring. Why? Pretty simple, really, but sort of profound at the same time, since webrings have all but disappeared with search engines claiming to be the end-all and be-all for all things searchy, but there’s a well defined need that’s developed that only webrings can solve. Lemme ‘splain.
If you talk to a “dog trainer,” most trainers will try to sell people on dog training being “Training the dog,” when it’s really “Training the people.” Googling it, though, there’s no magic trigger word or search switch or hashtag to confirm a site’s approach. Is this site engaged in people training or does it do dog training? By default, most are attempting to train the dog. However, I don’t. I train people.
I could use the honor system and come up with a magic word that stands for “peopletraining,” or maybe I could even use the hashtag #peopletraining as the keyword, but then we know how there will be those rogue individuals who won’t follow the rules, since that’s how some people are. So…
…the thing I want to do, then, is to implement a webring so that those who DO do #peopletraining get to be part of that #peopletraining webring, we can vet those who apply, we can choose to boot those who later switch from being primarily #peopletraining to #dogtraining, and the ring participants will have control over the strength and reliability of those participating in the ring.
Now, I need to start honing my coding skills and read what others have put together. @Chris’ CSS might be the place to start, but in the overall scheme of things, well, I’m not all that super savvy, so I’m sort of lost.
If it’s robust, if it’s accurate, if it’s hack-proof, if it’s flexible enough to adapt a month from now, a year from now, ten years from now if the #peopletraining ring sticks around that long, then I’ll stick with it. I just don’t have the chops to know what’s the right, best way to proceed.
Doug Parker
The DOuGTrainer
http://www.DOuGTrainer.com
Blueskying, here, if there could be a webring that incorporates a way to include a REPUTATION score for each site, that would be excellent. It makes total sense.
The webring can have its participants vet others on the ring in real time. If there’s a vote-up and a vote-down reputation button, then the ring can actively maintain its own reputation scores for each site, and when the reputation score gets below a certain threshold for a particular site, a flag can be thrown and stuff can happen because of the low reputation score having been reached.
How to do it, where to keep the numbers, how to keep it hack-proof, once again, I’m not so savvy at the moment, but I’m wondering if it’s still a solution that Github can provide.