Skip to content

Custom 404 pages in localized sites #12175

Description

@Sporiff

Astro Info

Astro                    v4.15.11
Node                     v22.9.0
System                   macOS (arm64)
Package Manager          npm
Output                   static
Adapter                  none
Integrations             auto-import
                         @astrojs/react
                         astro-expressive-code
                         @astrojs/mdx
                         @astrojs/tailwind
                         @astrojs/sitemap
                         @astrojs/markdoc

If this issue only occurs in one browser, which browser is a problem?

No response

Describe the Bug

I'm using Astro's i18n options to create a localized site in 4 languages: en, ja, zh, ko. A hard requirement for my use case is that we use the prefixDefaultLocale: true setting to ensure that the default locale (en) always appears in the path just like the others.

One thing I need is the ability to create a custom 404 page that gives users instructions on what to do next when they reach a page that doesn't exist. Before I updated to the multi-folder structure, this was achievable by placing a 404.astro in the pages directory. However, this page was not localized properly due to there not being any locale detection present. Since moving to the new folder-based hierarchy, I noticed that the 404.astro doesn't appear in the dist folder after running astro build.

Adding a custom 404.astro to pages/[lang] works if you visit the slug directly (e.g. /en/404), but it doesn't work when actually hitting a 404. I've managed to override this in Vercel by putting in a Vercel redirect that takes any 404 to the /en/404 route then using some client side scripting to push the user to the correct page.

What's the expected result?

I would like to be able to create a custom 404.astro in pages that routes to the custom 404.astro in pages/[lang] so that localized 404 pages may be served. Ideally, it would be good to control this via astro.config.mjs. Having the ability to simply set up locale-based routing to the major pages like index.astro and 404.astro would save a lot of time.

Link to Minimal Reproducible Example

https://stackblitz.com/edit/astro-no-localized-404

Participation

  • I am willing to submit a pull request for this issue.

Metadata

Metadata

Assignees

Labels

- P3: minor bugAn edge case that only affects very specific usage (priority)feat: i18nRelated to internalization (scope)feat: routingRelated to Astro routing (scope)pkg: astroRelated to the core `astro` package (scope)triage: failedTriage failed unexpectedly and can be retriedtriage: fix pendingReporter needs to verify the triage bot fix works

Type

Fields

No fields configured for Bug.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions