Languages, currencies and regions: international sites for AI agents
Usually fixed by: SEO or content team
If you sell in more than one country, an AI agent needs to know which version of your site it's reading: what language it's in, which currency the prices are in, and whether you'll deliver to the shopper's address. Get this wrong and an agent may quote a euro price to someone in Ohio, or never get past your country picker at all.
What can go wrong
International sites are built for people, who can see a flag in the corner, read a price symbol and click "change country". AI agents work from the page's code and text, often from a server in another country, and usually without the browser settings that a person's visit carries. Common failures:
- The agent is redirected to the wrong country store based on where its server is, and can't get back.
- A price shows "$" with no sign of whether it's US, Canadian or Australian dollars.
- Three language versions of the same page look like three unrelated pages, or like duplicates.
- The agent tells a shopper a product is available, when you don't ship to their country.
Declare the language with the lang attribute
Every page should say what language it's in, on its <html> tag:
<html lang="en-GB">
Use a language code, optionally with a region: en, en-GB, fr-CA, de-CH. It tells agents, screen readers and translation tools how to read the page. Make sure it changes with the language version. A French page that still says lang="en", because the theme hard-codes it, is surprisingly common. The AgentScore check "Clear page title, description, and headings" flags a missing lang attribute on your home page; see titles, descriptions and headings.
Connect language and country versions with hreflang
hreflang links tell agents and search engines that several pages are versions of the same content for different languages or regions, and which one is for whom. Each version lists all the others, and itself:
<link rel="alternate" hreflang="en-us" href="https://northwind.example/us/products/rain-jacket">
<link rel="alternate" hreflang="en-gb" href="https://northwind.example/uk/products/rain-jacket">
<link rel="alternate" hreflang="fr-fr" href="https://northwind.example/fr/produits/veste-pluie">
<link rel="alternate" hreflang="x-default" href="https://northwind.example/products/rain-jacket">
- Make it two-way. If the US page lists the UK page, the UK page must list the US page. One-way links are usually ignored.
- Use canonical URLs. Each
hrefshould be the canonical URL of that version, returning 200, not a redirect. See canonical URLs and duplicate pages. - Don't canonicalize across languages. The French page's canonical should point to the French page, not the English one.
- Add
x-default. It names the page for everyone else, typically a global version or a country picker that works without redirects. - Use correct codes. Language first, then optional region:
en-gb, notukorgb-en.
You can put hreflang in the page <head>, in HTTP headers, or in your XML sitemap. Pick one method and keep it consistent.
Region redirects that trap agents
Many stores redirect visitors automatically based on their IP address or browser language. For people, it saves a click. For AI agents it can be a dead end. Agents often run from cloud data centers, so the location you detect is the server's, not the shopper's. An agent helping someone in Berlin may be sent to your US store, and if every attempt to open /de/ bounces back to /us/, it can never read the German prices.
- Suggest, don't force. Show a banner ("Looks like you're in Germany. Go to the German store?") instead of redirecting.
- Never redirect away from an explicit country URL. If a request asks for
/de/products/rain-jacket, serve it. - Let the choice stick in the URL. Country and language in the path or subdomain work for agents. A choice stored only in a cookie doesn't, because many agents don't keep cookies between requests.
- Don't block whole regions without a reason. Blocking traffic from countries you don't sell to can also block the data centers AI agents run from. See geo-blocking, VPN blocks and AI agents.
Make the currency unambiguous
A symbol alone is often not enough. "$" is used by more than a dozen currencies, and "kr" by several. Show the currency code where there's any doubt (US$189 or 189.00 USD), and always put it in your structured data:
"offers": {
"@type": "Offer",
"price": "175.00",
"priceCurrency": "GBP",
"availability": "https://schema.org/InStock"
}
priceCurrency takes a three-letter ISO 4217 code: USD, GBP, EUR, CAD. Each country version should show its own price and currency in both the page and the markup. Say whether prices include sales tax or VAT, since that differs by country. More in machine-readable prices.
Watch out for converted prices. If prices are converted on the fly with JavaScript, an agent that doesn't run JavaScript sees your base currency, while the shopper would have paid something else. Render each store's price in the HTML.
Say where you ship
"Do they deliver to Canada?" is a question an agent should be able to answer before sending someone to your checkout. Make it easy:
- A shipping page in plain text listing the countries you ship to, with costs and delivery times for each. Not only a dropdown at checkout.
- Product-level restrictions on the product page. If an item can't ship to some countries, say so on that page.
- Shipping details in structured data. Schema.org's
shippingDetailson an Offer can describe where you deliver, at what cost, and how long it takes:
"shippingDetails": {
"@type": "OfferShippingDetails",
"shippingDestination": { "@type": "DefinedRegion", "addressCountry": ["GB", "IE"] },
"shippingRate": { "@type": "MonetaryAmount", "value": "4.95", "currency": "GBP" },
"deliveryTime": {
"@type": "ShippingDeliveryTime",
"handlingTime": { "@type": "QuantitativeValue", "minValue": 0, "maxValue": 1, "unitCode": "DAY" },
"transitTime": { "@type": "QuantitativeValue", "minValue": 2, "maxValue": 4, "unitCode": "DAY" }
}
}
Returns can differ by country too; give each MerchantReturnPolicy its applicableCountry. See Organization and LocalBusiness data and policy pages AI assistants can quote.
A checklist for each country version
- The
<html lang>attribute matches the page's language. - hreflang links connect every version both ways, with an
x-default. - Each version's canonical points to itself.
- Opening a country URL directly serves that country's page, with no forced redirect.
- Prices are in the HTML, with an unambiguous currency, and
priceCurrencymatches. - The countries you ship to are listed in text, and in
shippingDetailswhere you can.
If your country stores run on separate domains, such as northwind.example and northwind-uk.example, scan each one with AgentScore to compare them. To check a real journey in another market, such as "find a rain jacket and get to checkout on the UK store", run it with Ghost Agent and read the replay.