If you’re running a WordPress website and want to automatically redirect users based on their country or region — for example, from example.com
to example.co.uk
for UK visitors — you’re in the right place.
In this post, we’ll walk through several PHP-based methods to set up geo-redirects in WordPress. Whether you’re a developer or a DIY website owner, we’ll show you practical ways to detect user location and redirect them to the correct domain — without hurting your SEO.
Why Geo-Redirects Matter for WordPress Sites
Redirecting visitors to the right version of your site based on location can seriously improve:
- 🔥 User experience – Serve the right language, currency, or content.
- 📈 Conversion rates – People are more likely to buy when the site feels local.
- 🧠 SEO – When done right, it helps Google understand which site version is for which audience.
Let’s dive into the methods.
Method 1: PHP Geo-Redirect Using MaxMind GeoIP2
This is a powerful, server-side method that uses an IP database to detect the user’s country.
✅ How it works:
You download a GeoIP database and use PHP in your WordPress theme or custom plugin to handle the redirects.
🧩 Setup Steps:
- Download GeoLite2 Database
Create a MaxMind account and download the free GeoLite2 Country database. - Install the GeoIP2 PHP Library
If you’re using Composer:composer require geoip2/geoip2
- Add Redirect Logic to
functions.php
:
function geoip_country_redirect() {
if (is_admin() || php_sapi_name() === 'cli') return;
require_once __DIR__ . '/vendor/autoload.php';
use GeoIp2\Database\Reader;
$reader = new Reader(__DIR__ . '/GeoLite2-Country.mmdb');
$ip = $_SERVER['REMOTE_ADDR'];
try {
$record = $reader->country($ip);
$countryCode = $record->country->isoCode;
if ($countryCode === 'GB' && strpos($_SERVER['HTTP_HOST'], 'co.uk') === false) {
wp_redirect('https://example.co.uk' . $_SERVER['REQUEST_URI'], 302);
exit;
}
if ($countryCode === 'CA' && strpos($_SERVER['HTTP_HOST'], 'ca') === false) {
wp_redirect('https://example.ca' . $_SERVER['REQUEST_URI'], 302);
exit;
}
} catch (Exception $e) {
// Optional: log errors or ignore silently
}
}
add_action('init', 'geoip_country_redirect');
Method 2: Use a WordPress Geo Targeting Plugin
If you don’t want to mess with code, plugins can make geo-redirects a breeze.
🔌 Popular options:
- GeoTargeting WP
- IP2Location Redirection
- Country Redirect for WordPress
These plugins usually let you:
- Create rules based on country
- Redirect users to different domains or pages
- Whitelist bots like Google to avoid SEO penalties
✅ Great for non-developers
❌ May add load time depending on the plugin
Method 3: Use PHP + an IP Location API (No DB Needed)
This is a lighter method — instead of downloading a database, use an external API to fetch user location.
Example using ipapi.co
:
function api_geo_redirect() {
if (is_admin()) return;
$ip = $_SERVER['REMOTE_ADDR'];
$location = json_decode(file_get_contents("https://ipapi.co/{$ip}/json/"));
if (!empty($location->country)) {
if ($location->country === 'AU' && strpos($_SERVER['HTTP_HOST'], 'com.au') === false) {
wp_redirect('https://example.com.au' . $_SERVER['REQUEST_URI'], 302);
exit;
}
}
}
add_action('init', 'api_geo_redirect');
✅ No need to manage a database
❌ Slower — depends on third-party response times
❌ May fail without fallback logic
Method 4: Redirect Based on Language Headers
Sometimes, using browser language settings is enough to suggest a redirect.
function language_based_redirect() {
if (is_admin()) return;
$lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
if ($lang === 'fr' && strpos($_SERVER['HTTP_HOST'], 'fr') === false) {
wp_redirect('https://fr.example.com' . $_SERVER['REQUEST_URI'], 302);
exit;
}
}
add_action('init', 'language_based_redirect');
✅ No IP detection needed
❌ Less accurate than IP-based
❌ Users may have browser languages set incorrectly
SEO Best Practices for Geo-Redirects
Whatever method you choose, don’t forget your SEO hygiene:
- ✅ Use 302 (temporary) redirects, not 301 — you don’t want to confuse search engines.
- ✅ Don’t redirect Googlebot or other crawlers. Let them crawl all versions.
- ✅ Use hreflang tags to tell search engines which version is for which audience.
- ✅ Give users a manual option to switch regions/languages.
Example hreflang
tags:
<link rel="alternate" href="https://example.com" hreflang="en" />
<link rel="alternate" href="https://example.co.uk" hreflang="en-gb" />
<link rel="alternate" href="https://example.ca" hreflang="en-ca" />
Final Thoughts
Redirecting users by country in WordPress is easier than it sounds. Whether you go with a full GeoIP database, a lightweight API, or a plugin solution, the key is doing it cleanly — and keeping both users and search engines happy.
TL;DR:
- Use PHP with GeoIP2 for full control
- Go plugin route for simplicity
- Consider APIs for lightweight sites
- Don’t forget SEO essentials
Need help setting up redirects on your WordPress site? Drop a comment or reach out — I’d be happy to guide you!