~ / work/multi-country-school-directory

Building a multi-country school directory

// Editorial team

An international school directory has to handle schools in dozens of countries, with fees in local currencies, curricula from several systems and names in more than one script.

The public example here is International Schools DB, which lists international schools by country and city.

URLs that read like an atlas

Location pages follow a country then city pattern, so a reader or a search engine can guess the address of a page. The Bangkok page sits at /thailand/bangkok, with Thailand one level up. Editorial guides live under a separate articles path with the country, city and year, so a 2026 guide does not overwrite the 2025 one.

The data model

A school record needs its curricula, age range, campuses and fees. Fees are best stored in the local currency with the school year they apply to, rather than converted, because exchange rates move and parents compare in the currency they will pay. Each fee should carry a source and a checked date.

Campuses are separate records linked to the school, since one school can have several campuses in different districts or even different cities.

Several languages

School names often exist in two scripts, for example a Thai name and an English one. Store both and display the one that matches the page language. When a directory adds translated pages, the URL structure should already have room for a language prefix, and every translated page needs hreflang tags pointing to its equivalents. Our journal post on hreflang covers the mechanics.

Editorial guides

A list of schools does not answer "which area should we live in" or "what do fees include". City guides do, and they link to the listings. A written style guide for these articles helps, with rules such as naming a source for every fee and avoiding promotional adjectives.

Start with dates

Add a "last checked" date to every record from day one. Adding it later means re-checking every record before the date can be shown.