HTML <noframes> Tag
The <noframes> tag contains an alternate text to be displayed in browsers which do not support frames. See examples
The <noframes> tag defined the fallback content shown when a browser could not render a frameset. Together with <frameset> and <frame>, it belonged to the old "frames" model of splitting a browser window into multiple independent documents.
Do not use <noframes>, <frameset> or <frame> in new projects. They were deprecated in HTML5 (2014) and have since been dropped by modern browsers. This page is kept for reference only — to read or maintain legacy code, not to write new markup.
This page explains what <noframes> did, why it is gone, and what to use instead.
What <noframes> was for
In the frames era, a page was split into several regions, each loading its own HTML document. Some early browsers (and many screen readers) could not display frames at all. The <noframes> element gave those users an alternative:
- A short message such as "Your browser does not support frames."
- A link to a non-frameset (single-page) version of the site.
- Any full
<body>-level content as a usable fallback.
If the browser supported frames, the <noframes> content was ignored. The element was nested inside <frameset>, which itself replaced the page's <body>.
Why frames are obsolete
Frames caused serious, well-known problems that led to their removal:
- Broken bookmarking and URLs — the address bar showed the frameset URL, not the document a user was actually viewing, so links and bookmarks pointed to the wrong place.
- Bad accessibility — screen readers struggled to convey multiple independent documents in one window.
- SEO damage — search engines indexed individual frame documents out of context, with no surrounding navigation.
- No responsiveness — fixed frame sizing did not adapt to mobile screens.
Because of this, the entire frames model — and <noframes> with it — was removed from the HTML standard.
What to use instead
You do not need frames or a fallback element. Modern HTML and CSS cover every use case frames once served:
- Page layout — build columns, sidebars and headers with normal HTML elements and CSS Flexbox or Grid instead of splitting the window into frame regions.
- Embedding another document — use the
<iframe>element to embed one page (a map, video, or external widget) inside another. Unlike<frameset>,<iframe>is fully supported and does not break the page URL. - Shared header/footer/navigation — instead of loading a navigation frame once, render the shared markup with a templating engine, a static-site generator, or a JavaScript component.
The <iframe> element is the only "frame-like" tag still part of HTML. If your goal is to embed external content, reach for <iframe> — not <frameset>.
Syntax
The <noframes> tag came in pairs. The content was written between the opening (<noframes>) and closing (</noframes>) tags, inside a <frameset>.
Example of the HTML <noframes> tag (legacy, for reference only):
HTML <noframes> Tag
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
<html>
<head>
<title>Title of the document</title>
</head>
<frameset cols="50%,50%">
<frame src="https://www.w3docs.com/learn-html.html">
<noframes>Sorry, your browser doesn’t support frames. </noframes>
</frameset>
</html>In a frames-capable browser of the time, this would have split the window into two columns. Today, browsers ignore the <frameset> and <frame> elements, so the page renders as if it were empty — which is exactly why this markup should never ship in a new project.
Browser support
Removed. Frame support has been dropped from modern browsers. There is no version of Chrome, Firefox, Safari or Edge in which writing <frameset> / <frame> / <noframes> produces working frames. The elements are not part of the current HTML standard, and validators flag them as obsolete. Treat them as a historical feature with no path forward.
Attributes
The <noframes> tag only used the Global Attributes. Like the element itself, these are obsolete in this context.