HTML5 Boilerplate homepage | Documentation
table of contents


By default, HTML5 Boilerplate provides two html pages:


The no-js class

The no-js class is provided in order to allow you to more easily and
explicitly add custom styles based on whether JavaScript is disabled
(.no-js) or enabled (.js). Using this technique also helps avoid the

Language attribute

Please consider specifying the language of your content by adding the lang
attribute to <html> as in this example:

<html class="no-js" lang="en">

The order of the <title> and <meta> tags

The order in which the <title> and the <meta> tags are specified is
important because:

1) the charset declaration (<meta charset="utf-8">):

2) the meta tag for compatibility mode
(<meta http-equiv="X-UA-Compatible" content="IE=edge">):


Internet Explorer 8/9/10 support document compatibility
that affect the
way webpages are interpreted and displayed. Because of this, even if your site's
visitor is using, let's say, Internet Explorer 9, it's possible that IE will not
use the latest rendering engine, and instead, decide to render your page using
the Internet Explorer 5.5 rendering engine.

Specifying the X-UA-Compatible meta tag:

<meta http-equiv="X-UA-Compatible" content="IE=edge">

or sending the page with the following HTTP response header

X-UA-Compatible: IE=edge

will force Internet Explorer 8/9/10 to render the webpage in the highest
available mode in the various cases when it may
, and therefore, ensure that anyone
browsing your site is treated to the best possible user experience that
browser can offer.

If possible, we recommend that you remove the meta tag and send only the
HTTP response header as the meta tag will not always work if your site is
served on a non-standard port, as Internet Explorer's preference option
Display intranet sites in Compatibility View is checked by default.

If you are using Apache as your webserver, including the
.htaccess file takes care of
the HTTP header. If you are using a different server, check out our other
server config

Starting with Internet Explorer 11, document modes are
If your business still relies on older web apps and services that were
designed for older versions of Internet Explorer, you might want to consider
enabling Enterprise Mode throughout your company.

Mobile viewport

There are a few different options that you can use with the viewport meta
. You can find out more in the
Apple developer docs
HTML5 Boilerplate comes with a simple setup that strikes a good balance for general use cases.

<meta name="viewport" content="width=device-width, initial-scale=1">

Favicons and Touch Icon

The shortcut icons should be put in the root directory of your site. HTML5
Boilerplate comes with a default set of icons (include favicon and one Apple
Touch Icon) that you can use as a baseline to create your own.

Please refer to the more detailed description in the Extend section
of these docs.


HTML5 Boilerplate uses a custom build of Modernizr.

Modernizr is a JavaScript library which adds classes to
the html element based on the results of feature test and which ensures that
all browsers can make use of HTML5 elements (as it includes the HTML5 Shiv).
This allows you to target parts of your CSS and JavaScript based on the
features supported by a browser.

In general, in order to keep page load times to a minimum, it's best to call
any JavaScript at the end of the page because if a script is slow to load
from an external server it may cause the whole page to hang. That said, the
Modernizr script needs to run before the browser begins rendering the page,
so that browsers lacking support for some of the new HTML5 elements are able to
handle them properly. Therefore the Modernizr script is the only JavaScript
file synchronously loaded at the top of the document.

What about polyfills?

If you need to include polyfills
in your project, you must make sure those load before any other JavaScript. If you're
using some polyfill CDN service, like,
just put it before the other scripts in the bottom of the page:

    <script src="//"></script>
    <script src="//"></script>
    <script>window.jQuery || document.write('<script src="js/vendor/jquery-1.11.1.min.js"><\/script>')</script>
    <script src="js/plugins.js"></script>
    <script src="js/main.js"></script>

If you like to just include the polyfills yourself, you could include them in
js/plugins.js. When you have a bunch of polyfills to load in, you could
also create a polyfills.js file in the js/vendor directory. Also using
this technique, make sure the polyfills are all loaded before any other

There are some misconceptions about Modernizr and polyfills. It's important
to understand that Modernizr just handles feature checking, not polyfilling
itself. The only thing Modernizr does regarding polyfills is that the team
maintains a huge list of cross Browser polyfills.

The content area

The central part of the boilerplate template is pretty much empty. This is
intentional, in order to make the boilerplate suitable for both web page and
web app development.

Browser Upgrade Prompt

The main content area of the boilerplate includes a prompt to install an up to
date browser for users of IE 6/7. If you intended to support IE 6/7, then you
should remove the snippet of code.

Google CDN for jQuery

The Google CDN version of the jQuery JavaScript library is referenced towards
the bottom of the page using a protocol-independent path (read more about this
in the FAQ). A local fallback of jQuery is included for rare instances
when the CDN version might not be available, and to facilitate offline

The Google CDN version is chosen over other potential candidates (like the
jQuery CDN
) because
it's fast in absolute terms and it has the best overall
penetration which increases the
odds of having a copy of the library in your user's browser cache.

While the Google CDN is a strong default solution your site or application may
require a different configuration. Testing your site with services like
WebPageTest and browser tools like
PageSpeed Insights or
YSlow will help you examine the real
world performance of your site and can show where you can optimize your specific
site or application.

Google Universal Analytics Tracking Code

Finally, an optimized version of the Google Universal Analytics tracking code is
included. Google recommends that this script be placed at the top of the page.
Factors to consider: if you place this script at the top of the page, you’ll
be able to count users who don’t fully load the page, and you’ll incur the max
number of simultaneous connections of the browser.

Further information:

N.B. The Google Universal Analytics snippet is included by default mainly
because Google Analytics is currently one of the most popular tracking
out there.
However, its usage isn't set in stone, and you SHOULD consider exploring the
and use whatever suits your needs best!