diff --git a/docs/content/layout/404.html b/docs/content/layout/404.html
new file mode 100644
index 000000000..9d54e0d14
--- /dev/null
+++ b/docs/content/layout/404.html
@@ -0,0 +1,31 @@
+---
+title: "404.html Templates"
+date: "2013-08-21"
+---
+
+When using Hugo with [github pages](http://pages.github.com/) you can provide
+your own 404 template by creating a 404.html file in the root.
+
+404 pages are of the type "node" and have all the [node
+variables](/layout/variables/) available to use in the templates.
+
+In addition to the standard node variables, the homepage has access to
+all site content accessible from .Data.Pages
+
+ ▾ layouts/
+ 404.html
+
+## 404.html
+This is a basic example of a 404.html template:
+
+ {{ template "chrome/header.html" . }}
+ {{ template "chrome/subheader.html" . }}
+
+
+
+ {{ template "chrome/footer.html" }}
+
diff --git a/hugolib/site.go b/hugolib/site.go
index 870301d41..ac61bffb7 100644
--- a/hugolib/site.go
+++ b/hugolib/site.go
@@ -598,6 +598,18 @@ func (s *Site) RenderHomePage() error {
s.Tmpl.ExecuteTemplate(y, "rss.xml", n)
s.WritePublic("index.xml", y.Bytes())
}
+
+ if a := s.Tmpl.Lookup("404.html"); a != nil {
+ n.Url = Urlize("404.html")
+ n.Title = "404 Page not found"
+ n.Permalink = template.HTML(string(n.Site.BaseUrl) + "404.html")
+ x, err := s.RenderThing(n, "404.html")
+ if err != nil {
+ return err
+ }
+ s.WritePublic("404.html", x.Bytes())
+ }
+
return nil
}