The history of deprecated and changed HTML tags

Marcos Sandrini
8 min readMar 9, 2021


This is a sequence to my article about the early days of Web and how Web technology was shaped, now focused on HTML only.

In the previous article mentioned, it is stated that HTML was initially crafted by Tim Berners-Lee as a medium for text (hypertext, for that matter) and little else. The layout powers of Web, in the beginning, were not a concern, as well as no big functionalities were expected from it.

Only when people started using (and abusing) the Web as a commercial media, around circa 1994/95, HTML started being a limiting factor, as it was ideal for content but very limited for layouts and could not bear any serious programming logic by design. By that time, both JavaScript and CSS came to the rescue, liberating HTML to take care of solely the content.

It is worthy to mention, too, that the early days of Web browser wars (MS Internet Explorer vs. Netscape Navigator) were very wild, with lots of new features popping in frantically and little agreement between the two major competitors, which led to considerable variation on rendering across browsers and a very hard time for developers, that frequently had forked code on pages to be rendered on this or that browser. In this context, some HTML standards came up with a clumsy but somehow effective versioning system to accomplish rendering legacy HTML as well as “new” HTML in the same browsers.

All that, together with the very (in)famous backwards compatibility expected from the web, made for a very interesting situation in which old tags that were deprecated with good reasons can live together with newer ones and even be used on new projects (by accident, of course). Although this is obviously not recommended, HTML is not designed to be breakable like a programming language, so even if browsers may not fulfil the initial intention of a tag and even issue warnings for deprecated content, whatever may be inside a deprecated tag will most probably be displayed and several of them may even work as if it was 1999, it is all up to the browsers to decide.

Tags deprecated and changed for layout reasons

As said, presentation was a concern taken out of the HTML standard when pages began to demand too much on layout, and this part was handed to CSS. From that time many artefacts remained, in fact most of the tags considered deprecated by now are tags designed to be presentation tags:

  • basefont and font: as the name implies, the font tag carried font information for the text. The basefont tag, in its turn, set the base font for the document (although its use was pretty rare, even when people didn’t use CSS yet).
  • big and small: those tags refer to the text size, making the text bigger or smaller. Interesting to note here that the tag small is not deprecated, but it was rather re-purposed to mean something semantic, like “small print” text as copyright and other legal details.
  • blink: this legendary tag that was born out of boredom, probably, but was probably the least useful tag ever in HTML. Considered a “decorative” tag, that makes a given text, well, blink in the screen in a very distracting way The implementation of this tag is so annoying that it does not work in any of the modern browsers (not even the old IE) and there is no DOM interface for it any more, meaning it will be unrecognised in JavaScript.
  • marquee: another legendary and not very useful “decorative” tag. It makes the text go in a slower animation from one edge to the other of the parent, and back, bouncing linearly either vertically or laterally. Perhaps because it is way less annoying than blink, this tag is deprecated but still works in all major browsers as of 2021. Curiosity: this tag was not part of any of the 5 HTML standards published so far, created by Microsoft for some obscure reason and adopted by its rival back then, Netscape Navigator, for another reason that may be even more obscure.
  • b, i, s and u: those were created as pure font formatting tags for bold, italic, strike-through and underline, respectively. All of them are deprecated as presentation tags but they are still around and thrive as repurposed content tags: b now means “bring to attention”, i now means “idiomatic text”, u means “unarticulated annotation” and, finally, s is not given any new fancy/apologetic/semantic name but should indicate text that was crossed out, which is a content feature anyway (even though it slightly overlaps with the tags ins and del).
  • center: a pretty obvious layout tag
  • listing: unlike the name may imply, not a list (since the beginning there was ul and, a little later, ol) but something similar to what one can achieve today by using pre and code.
  • multicol: another pretty obvious layout tag, that was never very popular.
  • plaintext: the confusing name is for a tag that could be used for escaped text, today being replaced by pre. Never truly incorporated in most browsers, even when created — and soon deprecated.
  • nobr and spacer: non-standard tags for presentation purposes, the first one to avoid text breaks and the second one to insert a dummy space.

Tags that were replaced by another ones

For many reasons. Those are:

  • acronym: created to be an alias for the abbr tag in HTML 4, deprecated shortly after in favour of that one.
  • image: non-standard alias for the famous img tag that never caught on despite having a definitely better name. It seems like it was never in HTML standards’ intentions to support aliases.
  • bgsound: replaced by the infinitely better tag audio, much broader in scope.
  • strike: just an older, less consistent form of the tag s (strike-through)
  • tt: means “teletype text”, which sounds very old, much older than it is (created in HTML 2) but in the end it was just meant to be monospaced text and little else. It was replaced by code.
  • content: more recently, in the first custom web components specs, this tag was set to be what slot is today, an “inner point of entry” for those components.

Tags that supported old assumptions on how the web should work

As said, the web changed a lot and standards were not around for much of that time, so in the end some species perished in this “natural evolution”:

  • menu (not entirely): tag created to host basically context menus or other functionality menus (context menus are also known as right-click mouse menus). Deprecated after and sort of repurposed in a foggy way to serve as a generic “menu of commands”, whatever that may be. In practical terms, it can be considered half-dead now, as it is only implemented in Firefox.
  • menuitem: non-standard tag that was created to be used with menu for context menus (the right-click menu).
  • hgroup: now put out of the specification in a weird move, this tag created in HTML5 was meant to group only header tags (h1h6). Maybe it was deprecated because it wasn’t totally necessary or because it was too restrictive (no other tags could be used inside it other than header tags), I have the impression a lot of people actually used it — and continue to use.
  • xmp: this is a contender for the worst named tag ever, as it is supposed to mean “example” (reminds me of the character limitations of old languages like Fortran or file systems like the original FAT). This tag was created to bear examples of code, so the content inside it would be rendered without being escaped, in a similar fashion to plaintext.
  • isindex: a very early tag (from HTML 1) that was supposed to insert a search field inside a page to allow for an internal search valid only for the current page.
  • keygen: a weird tag specified on HTML 5 but deprecated shortly after, to be put on forms and host a public key to be part of a certification system with public and private keys. Not only it steps a bit too much into the functionality (which is a task for JavaScript, not HTML) but it also does seem like a very strange fit from the security point of view.
  • rb and rtc: both these tags were part of the system to allow for what is known as “ruby”, the text that may go alongside East Asian characters as explainers (used mostly on Japanese, but also on other languages from the region). These tags were deemed too much of a complication, especially since the “ruby system” already has the tags ruby, rp and rt.
  • frame, frameset and noframes: in the early days of the web, because connections were too slow and there were no single-page apps, frames became the method of choice to divide a page into sub-pages that would remain mostly static (they were used a lot for the header-menu-content combination, to make the header and menu remain the same and the content change). Times changed, connections improved, AJAX came and we didn’t need those any more.
  • embed and noembed: the first massively successful commercial browser, Netscape Navigator, introduced a couple tags on its own to bring new types of content to the web, one of those tags being embed. It was meant to host content that was external to HTML and was used mostly for the ominous (in 1997) Flash clips. Later, for that use, the object tag was created (still valid, although much less used today) and embed became deprecated.
  • shadow: when custom web components were first specified the concept was a little different. This tag (which doesn’t find counterparts now) was supposed to be like an “external entry point” for those components and their content.

Tags that paired with deprecated functionalities

  • applet: the idea of having small programs written in Java running inside web pages may seem ludicrous to you, but this tag was created to host such little programs. Back to the days where the concepts of speed, privacy and security on the web had very different expectations, this worked, and I remember fondly of the little but very bloated Java applets I wrote to have access to code bar printers on small web applications.
  • nextid: this is a funny one. You may remember that NeXT was the company that Steve Jobs founded after being fired from Apple in 1990s that got bought by Apple once Jobs was back to it. The OS from that company had a web editor, and this editor inserted internal control tags that were totally useless to any web page outside of this editor. Obviously, they were only used for as long as NeXT computers were popular (not much, not for long) and deprecated as soon as it was possible.

That last one also reminds me of how Macromedia Dreamweaver (a very old visual HTML editor) also injected a lot of useless content on pages, and don’t get me started on the MS Word HTML pages, which were a total mess of horribly unoptimised and weird-looking code. Oh, by the way, during some time the most used standard in web was not only an HTML standard but also an XHTML one. This extra “X” means it has extra functionalities from XML and so, for example, one can create custom functionless tags, even with a custom namespace… which Word made full use, by the way.

Well, hope you have enjoyed our trip throughout some of the strange places of the web that wasn’t, as well of a glimpse into the web that was (but not any more). Our HTML series continues further on with some more useful trips, this time into actual current stuff. Check it out!



Marcos Sandrini

Designer and front-end programmer with 20+ years of experience, also a keen observer of the world and its people