How a 14-room Kyoto ryokan made its five languages visible to Google
+341%
International organic sessions
日ja
英en
中zh
韓ko
仏fr
Five folds, five languages — one ridge of ink: international organic sessions over 9 months. A technical seo engagement.
壱The challenge
A beautiful inn, an empty page.
A client-rendered single-page site showed Google an empty shell. Its English, Chinese, Korean and French versions shared one URL, so international guests never found the inn directly.
Ryokan Shirasagi is fourteen rooms around a moss garden in Kyoto, run by the same family for three generations. Its site had been rebuilt as a slick single-page app with a language switcher in the corner — lovely for the guest who was already there, invisible to the guest still searching.
Overseas visitors found the inn the long way round: through agencies that charged up to 18% commission, and that outranked the inn even for its own name.
0 words · 0 links · 1 URL for 日本語, English, 中文, 한국어 and Français.
弐Diagnosis
Six findings from the render audit.
0words in the raw HTML
Every URL returned the same 2.1 KB shell — a <div id="root"> and a 1.4 MB script bundle. Room pages, kaiseki menus and the onsen existed only after JavaScript ran.
→ JavaScript rendering
1URL for five languages
Language switched client-side and was remembered in localStorage. Google saw one Japanese page; English, Chinese, Korean and French could never be indexed.
→ Hreflang
0hreflang annotations
No alternates, no x-default, and a canonical pointing at the root from every view — so even a rendered English page would have folded back into Japanese.
→ Hreflang
0structured-data entities
No Hotel or LodgingBusiness markup: no address, star rating, check-in times or amenities for the open-air bath and in-room dining.
→ Hotel schema
6.2smobile LCP
Hero photographs shipped as 4–5 MB JPEGs with no dimensions. Garden and room images had Japanese-only file names and no alt text.
→ Image optimisation
#7for its own name (EN)
Online travel agencies outranked the inn for “Ryokan Shirasagi” in English, taking a commission on every international booking.
→ Hreflang
参The strategy
Unfold the screen: give every language its own panel.
Built on our Signal plan (Technical SEO). Four moves, in the order the crawler needs them — first make the page exist, then make each language its own address, then describe the inn, then make it fast.
一 · 01
Hreflang
Each language got its own subfolder and self-referencing canonical. Reciprocal hreflang sets (ja, en, zh-Hant, ko, fr, plus x-default) were emitted in the head and in per-locale XML sitemaps, and the language switcher became plain links.
The single-page app was rebuilt as statically prerendered routes: every room, menu and seasonal page now arrives as complete HTML, and the booking widget hydrates on top. Raw and rendered word counts were diffed on every deploy until they matched.
71 routes × 5 languages prerendered · 2.1 KB shell → 38 KB of real content
三 · 03
Hotel schema
Hotel markup on every language version — address, geo, check-in and check-out, priceRange, amenityFeature for the private onsen and kaiseki dining, and 14 HotelRoom entities with occupancy — written in the page’s own language.
Hotel + 14 HotelRoom entities · validated in 5 languages
四 · 04
Image optimisation
AVIF and WebP with responsive sizes, explicit dimensions to stop layout shift, lazy loading below the fold, descriptive file names and alt text written per language rather than machine-translated.
Mobile LCP 6.2 s → 1.9 s · image weight −86%
四Five panels
Follow the heron across each market.
Home market · shirasagi.example/
3,980sessions / month, from 3,420+16%
Lead query
京都 旅館 東山 露天風呂
“Kyoto ryokan Higashiyama open-air bath”
The home market barely moved — it was never the problem. Prerendering simply made every room page indexable.
International market · shirasagi.example/en/
2,310sessions / month, from 620+273%
Lead query
kyoto ryokan with private onsen
Largest panel. US, UK and Australian guests now land on English room pages instead of OTA listings.
International market · shirasagi.example/zh-hant/
1,290sessions / month, from 260+396%
Lead query
京都 日式旅館 推薦
“recommended Japanese inn Kyoto”
Traditional-character pages for Taiwan and Hong Kong, with kaiseki menus as their own indexable section.
International market · shirasagi.example/ko/
940sessions / month, from 180+422%
Lead query
교토 료칸 추천
“Kyoto ryokan recommendation”
Korean copy reviewed by a native editor; check-in instructions became the most-visited page in the set.
International market · shirasagi.example/fr/
664sessions / month, from 120+453%
Lead query
ryokan kyoto authentique
“authentic ryokan kyoto”
Smallest market, highest booking value: longer stays, booked further ahead.
Use the panel titles, or the arrow keys, to unfold each market. Monthly figures are modelled.
五9 months
One fold a month.
一Month 1
Render audit
Raw-versus-rendered crawl of every view; Search Console baseline by country. Confirmed Google indexed one URL per page, in Japanese.
二Month 2
Prerender migration
Routes moved from client rendering to static HTML. The empty shell disappears; parity jumps from 3% to 100%.
三Month 3
Language URLs
/en/, /zh-hant/, /ko/ and /fr/ subfolders launch with hreflang, x-default and per-locale sitemaps.
四Month 4
Hotel schema
Hotel and HotelRoom markup in all five languages. Rich results appear for room and amenity queries.
五Month 5
Images
AVIF/WebP pipeline, dimensions, translated alt text. Mobile LCP falls to 1.9 seconds.
六Month 6
Native copy pass
Titles, descriptions and room copy reviewed by native editors for each market — no raw machine translation in the head.
七Month 7
Booking deep links
The booking engine opens in the visitor’s language and currency, so organic visits stop leaking to agencies.
八Month 8
Coverage sweep
Index coverage reaches all 355 language URLs; stray parameter URLs consolidated.
九Month 9
Guardrails
Hreflang and rendered-HTML parity checks run in CI, so a future release cannot quietly bring the shell back.
Bars: modelled progress of direct booking share toward month 9.
六Results
What the crawler sees now.
International organic sessions
+341%
Direct booking share
21% → 46%
Indexable language URLs
1 → 5 sets
Before/ ×5After日/英/en/中/zh-hant/韓/ko/仏/fr/
Rendered-HTML parity
100%
前
一
二
三
四
五
六
七
八
九
Modelled scenario for a fictional business — not a client result. Rankings and traffic are never guaranteed; see our Terms.
Lead queries by language
Query
Market
Before
Month 9
kyoto ryokan with private onsen
US · UK · AU
100+
#4
traditional ryokan gion
US · UK · AU
#38
#3
ryokan shirasagi
Global
#7
#1
京都 日式旅館 推薦
TW · HK
100+
#5
京都 溫泉旅館
TW · HK
#61
#7
교토 료칸 추천
KR
100+
#2
교토 전통 숙소
KR
#72
#6
ryokan kyoto authentique
FR · BE · CH
100+
#3
dormir dans un ryokan à kyoto
FR · BE · CH
#54
#4
京都 旅館 東山 露天風呂
JP
#9
#3
Get a plan like this
If your site speaks more languages than Google can hear, Signal starts with the same render audit.