We integrate turnkey regional subdomain configurations to solve region detection issues. A common mistake leads to bounce rates as high as 80%—we've seen it firsthand. Our team develops and implements subdomain systems that accurately detect user location and redirect to the appropriate language version, boosting conversion and SEO performance.
Imagine a German user lands on your site from Google Deutschland, sees an English interface, and leaves within 3 seconds. Bounce rate 80%, conversion — zero. The reason is the lack of regional routing. We solve this problem: we configure subdomains for each region (ru.wikipedia.org, de.wikipedia.org), correctly redirect based on geo and language, and mark up hreflang. Below is the specific stack and configs we use in production.
Over the past 10 years, we have implemented more than 50 projects with multilingual subdomains — from e-commerce stores to SaaS platforms. A typical picture: a client loses up to 60% of traffic due to incorrect geolocation. Subdomains solve this problem 3 times more effectively than subdirectories.
Why regional subdomains and not subdirectories?
| Criteria | Subdomains (ru.wikipedia.org) | Subdirectories (wikipedia.org/ru/) |
|---|---|---|
| Geotargeting | Country binding via Google Search Console settings | Requires additional signals |
| Management | Independent configurations (language, content, design) | Single codebase, harder to separate |
| SEO authority | Each subdomain accumulates its own authority | Authority is passed to the main domain |
| Loading speed | Ability to distribute across different servers/CDN | Single server may be slower |
The choice depends on business goals. For large projects with different regions, subdomains offer more flexibility.
What problems do we solve?
- Incorrect geolocation: a user from Germany lands on the English version — bounce rate increases. We've seen projects where bounce jumped to 70%. After implementing subdomains for an e-commerce client, bounce rate dropped from 72% to 34% in a month, and conversion increased by 25%.
- Duplicate content: without hreflang, search engines penalize for identical texts on different subdomains. One client lost 40% of positions due to this.
- Slow loading: lack of CDN and regional servers increases TTFB. Our configurations reduce TTFB to 80 ms.
- Indexing difficulties: incorrect redirects and missing sitemap for each subdomain.
How we configure regional subdomains
Step 1: DNS and SSL
We set A records for each subdomain, pointing to the required server or load balancer. For example, for the domain wikipedia.org, we create:
-
ru.wikipedia.orgpoints to a server in Russia -
en.wikipedia.orgpoints to a server in the EU -
de.wikipedia.orgpoints to the same EU server
For SSL, we use a wildcard certificate *.wikipedia.org or separate certificates. Let's Encrypt certificates are free, allowing significant savings on SSL for each subdomain.
Step 2: Web server (Nginx)
We create virtual hosts for each subdomain. Pass the LOCALE variable to the application.
# ru.wikipedia.org
server {
listen 443 ssl http2;
server_name ru.wikipedia.org;
root /var/www/wikipedia.org/public;
location / {
fastcgi_pass php-fpm;
fastcgi_param LOCALE "ru";
include fastcgi_params;
}
}
# en.wikipedia.org
server {
listen 443 ssl http2;
server_name en.wikipedia.org;
root /var/www/wikipedia.org/public;
location / {
fastcgi_pass php-fpm;
fastcgi_param LOCALE "en";
include fastcgi_params;
}
}
Step 3: Application middleware (Laravel)
We determine the locale from the subdomain and set it in the application.
// Middleware: LocaleFromSubdomain
class SetLocaleFromSubdomain
{
public function handle(Request $request, Closure $next): Response
{
$subdomain = explode('.', $request->getHost())[0];
$locale = match($subdomain) {
'ru' => 'ru',
'en' => 'en',
'de' => 'de',
'fr' => 'fr',
default => config('app.locale'),
};
App::setLocale($locale);
Carbon::setLocale($locale);
return $next($request);
}
}
Step 4: hreflang for SEO
We generate links to alternative versions of each page.
// In the template: alternative versions for search engines
$locales = ['ru', 'en', 'de'];
foreach ($locales as $loc):
$url = "https://{$loc}.wikipedia.org" . request()->getPathInfo();
?>
<link rel="alternate" hreflang="<?= $loc ?>" href="<?= $url ?>" />
<?php endforeach; ?>
<link rel="alternate" hreflang="x-default" href="https://en.wikipedia.org<?= request()->getPathInfo() ?>" />
Step 5: Redirect to regional subdomain
We redirect users from the main domain to the appropriate subdomain based on GeoIP and Accept-Language.
// Middleware: RedirectToRegionalSubdomain
class RedirectToRegionalSubdomain
{
public function handle(Request $request, Closure $next): Response
{
if ($request->getHost() === 'wikipedia.org') {
$locale = $this->detectLocale($request);
return redirect("https://{$locale}.wikipedia.org" . $request->getPathInfo(), 301);
}
return $next($request);
}
private function detectLocale(Request $request): string
{
// Priority: cookie → Accept-Language → GeoIP
if ($cookie = $request->cookie('preferred_locale')) return $cookie;
$acceptLanguage = $request->getPreferredLanguage(['ru', 'en', 'de', 'fr']);
return $acceptLanguage ?? 'en';
}
}
How to determine the user's region?
We use a combination of methods: GeoIP database (MaxMind), HTTP Accept-Language header, and user preference cookies. Priority is usually: cookie > Accept-Language > GeoIP. We implement this logic in the application middleware.
| Method | Accuracy | Dependency |
|---|---|---|
| Cookie | High | User must select language |
| Accept-Language | Medium | Browser settings |
| GeoIP | High for country | Database updated monthly |
What is included in the work
- DNS records and SSL certificates for all subdomains
- Nginx/Apache configuration with locale passing
- Middleware for locale detection and setting
- hreflang markup on all pages
- Redirects from the main domain to regional subdomains
- Maintenance documentation
- Testing on a staging server
Detailed setup checklist:
- Verify that SSL is configured for each subdomain (Let's Encrypt or wildcard)
- Ensure Nginx passes the LOCALE variable to the application
- Configure middleware for automatic locale detection from subdomain
- Generate hreflang tags for all language versions
- Set up redirects from the main domain to the regional subdomain (301)
- Test redirects and indexing in Google Search Console
- Set up sitemaps for each subdomain
Timelines and cost
Basic setup (up to 5 subdomains) — from 2 to 3 working days, cost from $500 to $1,000. Complex configurations (GeoIP, CDN, custom logic) — from 5 to 7 days, cost from $1,500 to $3,000. The cost is calculated individually, depending on the scope of work and technology stack. Savings on advertising budget due to proper geotargeting can reach 50%, which means recovered revenue of thousands of dollars.
How the work proceeds
- Analysis: identify regions, choose strategy (subdomains vs subdirectories).
- Design: DNS scheme, server configurations, middleware.
- Implementation: server setup, coding, hreflang markup.
- Testing: check redirects, indexing, speed.
- Deployment and monitoring.
Contact us to discuss your project. Order a turnkey configuration of regional subdomains — get a consultation from an engineer with 10+ years of experience. We guarantee a seamless, SEO-friendly setup.







