Chapter 5 of 5 · SEO for Thai Websites — Getting Google to Find, Understand and Choose Your Pages
Bilingual sites and measuring: hreflang, Search Console and targets you can hit
Make the Thai and English versions of a page point at each other correctly, the traps that make Google ignore the whole set, how to read the Performance report to know what to fix, and how to pick searches a small site can win.
The last chapter of the series has two parts. The first is for sites in more than one language: how to tell Google which page is which version. The second applies to every site: reading the numbers so you know what to do next.
5.1 What hreflang is for
If the same article exists in Thai and English, hreflang tells Google the two pages are the same content in different languages, so it can show the version that matches the searcher.
A single-language site does not need hreflang.
5.2 The rules to get right
hreflang can go in three places: <link> tags in <head>, an HTTP header, or the sitemap. Tags in <head> are the most common.
<!-- the same set on both the Thai and the English page -->
<link rel="alternate" hreflang="th" href="https://example.com/th/menu">
<link rel="alternate" hreflang="en" href="https://example.com/en/menu">
<link rel="alternate" hreflang="x-default" href="https://example.com/th/menu">
| Rule | If you miss it |
|---|---|
| Every version lists itself and every other version | Google may ignore the annotations |
| If page A points to page B, B must point back to A | Google may ignore that pair |
Codes are an ISO 639-1 language with an optional ISO 3166-1 region: th, th-TH, en-GB | Wrong codes such as en-UK or th_TH do not work |
URLs are fully qualified: https://example.com/th/menu | /th/menu or //example.com/th/menu do not work |
Tags sit inside a well-formed <head> | Google says they must be in <head>; tags that slipped into <body> risk not counting |
| Each version’s canonical is the page in the same language | Google says to specify a canonical in the same language, or the best possible substitute language if none exists; point across languages when a same-language page exists and Google may pick the other language’s page as the main one |
x-default is optional: it names the page to show when the searcher’s language matches none.
A common misunderstanding: Google says it does not use html lang or hreflang to detect a page’s language; it reads the language from the content. hreflang describes the relationship between pages, not the language.
th or th-TH: if the Thai content is not aimed at one country, th is enough. Use th-TH when you have country versions — one page for readers in Thailand and a separate one elsewhere.
A lesson from KoishiAI: hreflang pointing at noindex pages
The site has tag pages in both languages, and tags with few articles are set to noindex. The count was done per language, so the same tag was often indexable on one side and noindex on the other. The indexable page’s hreflang then pointed at a partner we had ourselves told Google not to keep, and the pair was useless on both sides.
We fixed it by deciding indexing per pair: index both languages or neither. The rule we have followed since is that hreflang points only at pages that are canonical and indexable.
5.3 Reading the Performance report for answers
The Performance report in Search Console has filters that answer sharper questions than the totals do.
| Question | How to look | If you find this |
|---|---|---|
| People see but do not click | Sort by impressions and look at each page’s CTR | Low CTR: rewrite the title and description (chapter 3) |
| Which searches almost reach page one | Look at queries whose average position is just below the first page | Make that page answer the query more directly; add internal links to it |
| Did the change work | Compare date ranges before and after the change | Look at the page you changed, not the whole site |
| Thailand or abroad | Filter by country | If most readers are abroad, your language or keywords may not fit your audience |
| Mobile or desktop | Filter by device | If mobile CTR is lower than desktop, check whether titles get cut to nonsense on small screens |
Remember that average position is your topmost position for each query, averaged. If a page ranks at the top for one query and very deep for another, the average may match no real query at all. Look query by query.
5.4 Targets a small site can win
A new site competing for broad terms that big sites own has almost no chance. What works better is choosing more specific searches that your site genuinely answers better than anyone.
A lesson from KoishiAI: narrower to win
“AI news” in English is owned by the big international tech outlets; a young domain gains nothing by competing there. We narrowed the target to AI news in Thailand and AI news that matters to Thai readers, which the big foreign sites do not cover, and wrote titles and descriptions to match.
The same idea works for your site:
- a restaurant: “chicken rice restaurant” is too broad; “khao man gai Sukhumvit” or your signature dish is winnable;
- a knowledge blog: choose specific questions people really ask, and answer them more completely than the pages ranking now;
- a service business: terms that combine the service with the area you really serve.
5.5 The whole series as a checklist
| Chapter | Check |
|---|---|
| 1 | Site verified in Search Console; statuses in Page indexing reviewed; key pages inspected with URL Inspection |
| 2 | robots.txt not used to hide pages; noindex pages readable; canonical clear; sitemap clean; no links to noindex pages |
| 3 | Titles and descriptions use searchers’ words and are unique; URLs stable; images have alt text |
| 4 | JSON-LD matches the content and passes the Rich Results Test; share cards have a real image of adequate size |
| 5 | hreflang complete in every language and reciprocal; Performance read query by query; targets specific enough to win |
Work one chapter at a time, note the date of each change, and look at results over a long window — as chapter 1 said, some changes take months to show.
Related tools
- Hreflang checker — paste each language version’s HTML and see whether they point at each other correctly
- Sitemap.xml checker — also checks hreflang inside a sitemap