Why international SEO is its own discipline
Domestic SEO is hard. International SEO is hard and different — different enough that most of what works in your home market either does nothing abroad or actively hurts you. The reason is that Google's geo-signal stack is designed to keep results relevant to a user's location and language, and your job stops being "rank for X" and starts being "rank for X in Y, while not cannibalising your ranking for X in Z."
Three things change as soon as you cross a border. First, intent splits — "delivery" in Australia means different things from "delivery" in Singapore. Second, the SERP itself is different — Google AU shows different competitors, different SERP features, and a different AI Overview rate than Google DE on the same query. Third, the trust signals shift — backlinks from your home market count for less in a foreign market unless your domain authority itself is high.
The work below is the playbook I run at Yuan Packaging, where one English-first site has to rank for distributor and trade-show queries across AU, SG, ID, DE, and (eventually) CN. It assumes you've already done the persona work for each market, because there's no point ranking for queries no real customer is searching.
The architecture decision: ccTLD vs subdomain vs subdirectory
The most consequential decision in international SEO is the URL architecture. Three options, very different trade-offs.
Country-code TLDs (ccTLDs) — yuanpackaging.de, yuanpackaging.sg
The strongest geo-signal you can give Google. The TLD itself tells the search engine which country the site is for, before any content even loads. Big advantage on geo-targeted queries. Massive disadvantage everywhere else: each ccTLD is a brand-new domain with zero authority, so you start from scratch in every market. Domain authority does not transfer via ownership; it transfers via backlinks.
When ccTLDs win: when the markets are large enough to justify the cost (Germany, France, Japan), when local trust matters more than search dominance (legal, financial), or when you already have ccTLDs from acquisition.
Subdomains — au.yuanpackaging.com, de.yuanpackaging.com
The middle option, and almost always the wrong one. Subdomains are treated by Google as separate sites for ranking purposes, so authority transfer between them is partial and inconsistent. You get few of the benefits of ccTLDs (the geo-signal isn't as strong) and few of the benefits of subdirectories (authority doesn't compound cleanly).
When subdomains win: hosting constraints (different CMS per market), team structure (different agency per region), or when content is so different per market it really is a different site (rare).
Subdirectories — yuanpackaging.com/au/, yuanpackaging.com/de/
The default choice for most B2B sites. One domain, one ops surface, one set of backlinks compounding for the whole organisation. Geo-targeting is set per directory in Google Search Console. Hreflang does the language/country pairing work.
When subdirectories win: small team, limited budget, B2B sales-led growth, and any market where you're starting from zero. This is what I run at Yuan.
Hreflang, the part most teams get wrong
Hreflang tells Google which language and country combination each version of a page is for. Done correctly, it disambiguates "delivery" between AU and SG without you needing two completely different sites. Done incorrectly — which is most of the time — it confuses Google so badly that no version ranks anywhere.
The three rules
- Reciprocal. If page A says "page B is the de-DE version of me," page B has to say the same thing back. Non-reciprocal hreflang is ignored. This is the single most common mistake.
- Self-referential. Each page must include an hreflang tag pointing to itself. So the EN page lists itself plus all variants; the DE page lists itself plus all variants.
- Plus an x-default. The fallback locale for users Google can't geo-resolve. Usually your English version. Without this, Google guesses badly on edge cases.
Where to declare it
Three options, in order of robustness:
- HTTP header — the only option for non-HTML files (PDFs, etc). Cleanest for sites with strong dev support.
- XML sitemap — best for sites with many pages, where managing tags in <head> would balloon the markup. This is what I use at Yuan.
- <head> tags — fine for small sites. Becomes a maintenance nightmare past ~20 pages.
Pick one and stick with it. Mixing methods doesn't break anything but makes auditing painful.
Language vs country codes
Hreflang takes ISO 639-1 language codes (en, de, id, zh) optionally combined with ISO 3166-1 country codes (AU, SG, DE, CN). Use language alone when content is the same across all countries that share that language. Use language-plus-country when there are real differences — pricing, contact, regulations, trust signals.
For Yuan: en alone is fine for the EN-default, because the differences between AU and SG English packaging buyers are smaller than the differences between EN and DE buyers. de-DE is country-specific because German B2B buyers expect German legal information (Impressum, AGB) that's different from Austrian or Swiss requirements.
Content localisation, not translation
The single biggest waste of international SEO budget is treating localisation as translation. Translation gets the words right. Localisation gets the queries right.
An example from Yuan: the EN page targets "custom corrugated boxes wholesale." The German equivalent isn't a literal translation. German B2B buyers search "Wellpappe Verpackung B2B" — different word order, different compound, different intent emphasis (B2B is more explicit because retail dominates the SERP otherwise). Run keyword research per market, in the local language, ideally with a native-speaker reviewer.
Three things must localise, not just translate:
- Keywords and headings — based on local search volume and intent, not on the EN equivalents.
- Trust signals — testimonials from local customers, local press, local certifications. Distributor logos from the actual market.
- Calls-to-action — pricing in local currency, local shipping terms (Incoterms matter for B2B), local working-hours displayed.
Three things you should resist localising too aggressively:
- Brand voice — your brand should feel like the same brand in every language. Adapt the register, not the soul.
- Visual identity — same logo, same colour palette, same typography (within reason — CJK languages need different font choices, but the same hierarchy).
- The product itself — unless there's a real product reason to differ, don't fork the offering by market.
Technical signals beyond hreflang
Hreflang is the headline. The supporting cast matters too:
- Geo-targeting in Search Console — explicitly set the target country per subdirectory. This was deprecated as a ranking signal but still helps Google interpret ambiguous cases.
- Server location / CDN — irrelevant in 2026 if you're on Cloudflare or Netlify (both edge-cached globally). Still relevant if you're hosting in one country only.
- Local backlinks — links from .de domains carry more weight for de-DE rankings than links from .com. Do real PR in each market, not just press releases.
- Currency and address signals — phone numbers, addresses, and prices in local format. Schema.org PostalAddress with country code helps.
- Page speed in market — Lighthouse from your office and Lighthouse from Düsseldorf are not the same number. Test from a tool that simulates the market.
- Mobile-first — non-negotiable globally; even more so in markets like Indonesia where mobile is >90% of traffic.
How to measure what's working
If you have one Search Console property covering all markets, you cannot tell which market is gaining or losing. The single most important setup move is to create separate Search Console properties per subdirectory (Yuan Packaging has six). Then you can:
- See impressions, clicks, and average position by market.
- Compare CTR per market — usually the most diagnostic single metric.
- Watch for indexation drops in a single market (often the first sign of an hreflang misconfiguration).
In GA4, set up a market-level dimension and view conversion paths per market. If you can't see lead volume by market, you can't optimise per market.
The metric I check weekly: impressions × CTR by market. Impressions tell me whether the indexation and hreflang are working. CTR tells me whether the local copy is doing its job.
Mistakes I see most often
- Auto-translating with a plugin. Google can detect machine translation and de-prioritises it. Even worse: machine-translated pages cannibalise the EN version in the AI Overview pool because they all "exist" as separate pages with similar content. Either translate properly or noindex the auto-version.
- Forgetting reciprocal hreflang. Page A says "page B is the DE version" but page B doesn't say it back. Google ignores both. Audit reciprocity quarterly.
- Skipping x-default. Without it, Google guesses badly on queries from countries you don't have a version for. The default should be your strongest version, usually EN.
- Using IP-based redirects. Don't auto-redirect users by IP. Googlebot crawls from US IPs almost exclusively, so it will only ever see your EN version. Offer a banner or modal instead.
- Different content per market with the same URL. Geo-IP serving variants under one URL hides content from the crawler. Different content needs different URLs.
- Treating EN as one market. en-AU, en-US, en-GB, en-SG all have different intents on most B2B queries. If you serve all of them off one /en/ directory you'll rank in none of them.
- Localising the URL slugs but not the content. /de/lieferung-deutschland/ pointing to a page that's still in English. Google reads both signals and is confused.
- Migrating mid-campaign. Don't move from subdomain to subdirectory while a paid push is running. Pick a quiet quarter and 301 everything atomically.
The 30-item launch checklist
What I actually run before flipping the switch on a new market. Group by phase.
Strategy (week 1–2)
- ☐ Persona done for the new market — see the personas piece.
- ☐ Keyword research in the local language, native speaker review.
- ☐ SERP audit for the top 20 commercial-intent queries.
- ☐ Competitor analysis — local competitors are usually different from your home-market ones.
- ☐ Decision on architecture: ccTLD vs subdomain vs subdirectory, documented with reasoning.
- ☐ Decision on language/country pairing for hreflang.
Content (week 2–6)
- ☐ Top 20 pages localised, not translated. Native-speaker review.
- ☐ Local trust signals — testimonials, certifications, distributor logos.
- ☐ Currency, units, and Incoterms updated.
- ☐ Phone, address, working hours in local format.
- ☐ FAQ adapted for local concerns (shipping times to that country, customs, etc).
- ☐ Schema.org PostalAddress with country code per market.
Technical (week 4–6)
- ☐ Hreflang declared (sitemap, head, or HTTP header — pick one).
- ☐ Reciprocal hreflang verified for every page.
- ☐ x-default set to EN.
- ☐ Self-referential hreflang on every page.
- ☐ Search Console property created per market.
- ☐ Geo-targeting set per subdirectory in Search Console.
- ☐ XML sitemap per market, submitted.
- ☐ robots.txt allows new directories.
- ☐ Canonical tags self-referential, never cross-locale.
- ☐ No IP redirects between locales.
Launch and after (week 6+)
- ☐ Local PR push for backlinks from the market's domain.
- ☐ Weekly Search Console review per market for first 12 weeks.
- ☐ Indexation monitoring — alert if any market loses >10% indexed pages.
- ☐ CTR monitoring per market — early signal of copy/intent fit.
- ☐ Crawl budget audit — large multi-market sites burn crawl budget fast.
- ☐ Quarterly hreflang audit (reciprocity, x-default, broken pairs).
- ☐ Annual local-keyword refresh.
- ☐ Local-currency and price-format checks before any pricing change.
Most of this list is invisible to the user and unmistakable to a crawler. That asymmetry is again the opportunity. Spend two months on a single market doing all of this — and pick a market where you have one good local backlink to seed it — and you'll outrank competitors who entered three years ago.