Illustrative case study

A fictional business. The figures are a modelled scenario, not a client result.

Ryokan ShirasagiTraditional 14-room ryokan · Kyoto

How a 14-room Kyoto ryokan made its five languages visible to Google

+341%

International organic sessions

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.

What Google received — before
<html lang="ja">
<head><title>白鷺</title></head>
<body>
  <div id="root"></div>
  <script src="/app.4f1c.js"></script>
</body>
</html>

0 words · 0 links · 1 URL for 日本語, English, 中文, 한국어 and Français.

Diagnosis

Six findings from the render audit.

  1. 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

  2. 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

  3. 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

  4. 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

  5. 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

  6. #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.

1 URL → 5 URL sets · 355 indexable pages · 0 return-tag errors

二 · 02

JavaScript rendering

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.

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.

Use the panel titles, or the arrow keys, to unfold each market. Monthly figures are modelled.

9 months

One fold a month.

  1. 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.

  2. Month 2

    Prerender migration

    Routes moved from client rendering to static HTML. The empty shell disappears; parity jumps from 3% to 100%.

  3. Month 3

    Language URLs

    /en/, /zh-hant/, /ko/ and /fr/ subfolders launch with hreflang, x-default and per-locale sitemaps.

  4. Month 4

    Hotel schema

    Hotel and HotelRoom markup in all five languages. Rich results appear for room and amenity queries.

  5. Month 5

    Images

    AVIF/WebP pipeline, dimensions, translated alt text. Mobile LCP falls to 1.9 seconds.

  6. Month 6

    Native copy pass

    Titles, descriptions and room copy reviewed by native editors for each market — no raw machine translation in the head.

  7. Month 7

    Booking deep links

    The booking engine opens in the visitor’s language and currency, so organic visits stop leaking to agencies.

  8. Month 8

    Coverage sweep

    Index coverage reaches all 355 language URLs; stray parameter URLs consolidated.

  9. 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%

02k4k前一二三四五六七八九5,204 / mo1,180

Direct booking share

21% → 46%

46%from 21%

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
QueryMarketBeforeMonth 9
kyoto ryokan with private onsenUS · UK · AU100+#4
traditional ryokan gionUS · UK · AU#38#3
ryokan shirasagiGlobal#7#1
京都 日式旅館 推薦TW · HK100+#5
京都 溫泉旅館TW · HK#61#7
교토 료칸 추천KR100+#2
교토 전통 숙소KR#72#6
ryokan kyoto authentiqueFR · BE · CH100+#3
dormir dans un ryokan à kyotoFR · 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.

← All case studies