---
url: /modules/regions.md
---
# Regions&#x20;

Regions let one site serve several countries or markets from the same pages. A page keeps one content tree; a region can override fields per locale, and the URL carries the region as a prefix, `/ch-de/about` for Switzerland in German next to `/de-de/about` for Germany. Shopify stores can map to regions so prices and availability follow the market.

Regions are a core feature behind a module switch, not a module directory of their own.

::: glance

* **Module key** `region`
* **Default** **off**
* **Switch** `EVOLVE_MODULE_REGION=true`, also the Developers tab in Settings; see [Modules](/modules/#switching-a-module-on-or-off)
* **Panel** `/evolve/region`, under System in the user menu
* **Since** 2.6
  :::

## Configuration

| Variable | Default | Panel | Effect |
|---|---|---|---|
| `EVOLVE_MODULE_REGION` | `false` | Developers tab | Switches regions on. |
| `EVOLVE_REGION_REMOVE_DEFAULT_PREFIX` | `false` | General tab | Serve the default region without its prefix, so `/about` instead of `/ch-de/about`. |

## In the panel

**Regions** (`/evolve/region`): a region has a name, a code that becomes the URL prefix (`ch-de`), a default flag, the locales it allows and a fallback locale. Only one region is the default.

On a page, the region select assigns the page to a region. The editor then shows the locales of that region, and assigning a region copies the existing content into the region's fallback locale without overwriting anything (since 2.11). Block fields can carry region overrides, including repeatable fields. Navigations are per region; saving a navigation forgets the cached tree of every region.

## On the site

A request to `/{region}/{locale-path}` resolves to the page and renders it with the region's overrides. The `hreflang` alternates and the `x-default` link respect the locales a region allows, see [SEO and Head](/site/seo-and-head). The sitemap lists the region paths.

## Commands

| Command | Does |
|---|---|
| `evolve:normalize-route-regions [--dry-run]` | Recomputes route paths and region IDs from each record's own region and creates redirects for every path that changed. Run after moving pages between regions in bulk or after enabling regions on an existing site. |
| `evolve:seed-region-content [--page=*] [--dry-run]` | Copies block content of region pages from locales their region does not allow into the region's fallback locale, filling empty fields only. For pages assigned to a region before 2.11. |
| `evolve:remove-prefixes` | Removes the `de/` prefix from all routes and creates redirects. For single-language sites that drop the locale prefix. |

Every command that rewrites paths creates system redirects, so old URLs keep resolving. Run with `--dry-run` first on a copy of the live database.

## Verifying

Open a page under its region prefix and under another region: the overridden fields differ, everything else is shared. `php artisan route:list --path=evolve/region` shows the panel route. With `EVOLVE_REGION_REMOVE_DEFAULT_PREFIX=true`, the default region's pages answer without the prefix and the prefixed URL redirects.
