Documentation

Paths and routing

Set up page addresses, app routes and a custom 404 page.

Addresses do not need .html: a visit to /about is answered by about.html or by about/index.html, whichever you have.

what answers what
your files                addresses
------------------------  ------------------------------------------
index.html                /
about.html                /about        (/about/ redirects here)
blog/index.html           /blog/        (/blog redirects here)
blog/first-post.html      /blog/first-post
assets/app.css            /assets/app.css
404.html                  anything missing, with a 404
200.html                  anything missing, with a 200

Single-page apps

If your app handles its own routes, name its entry file 200.html. Any page address that does not match a file is answered with that file and a 200 status, so reloading /settings/billing starts your app instead of showing a 404.

Your own 404

Add a 404.html and it is shown for any missing address, with a real 404 status. If a site has both 404.html and 200.html, the 200.html is used, since an app has to see the address before it can decide the address is missing.

These fallbacks apply only to page addresses, meaning ones with no extension or ending in .html or .htm. A missing image or stylesheet gets a plain 404, never your 200.html.

Trailing slashes

For about.html, /about/ redirects to /about. For about/index.html, /about redirects to /about/. This keeps relative links and images resolving from the right place.

Last updated 11 September 2026