# GeoKepo
> GeoKepo is a bilingual (Indonesian / English) reference site about Indonesia: editorial profiles of all 514 regencies and cities across the country's 38 provinces, 3,087 points-of-interest entries, 2,900+ long-form travel guides, province and island-region overviews and regional cuisine entries. It also runs a daily geography puzzle, but the encyclopedia is the bulk of the site. Content is editorially written and grounded in Wikidata, OpenStreetMap and Indonesian government statistics.
Operated by the GeoKepo Editorial Team (admin@geokepo.id). Every URL carries a locale prefix — `/id/` (Bahasa Indonesia) and `/en/` (English). Indonesian is the source language. English pages are published where translated content exists; consult each page's `hreflang` cluster rather than assuming a translation is available.
## Reading a page as markdown
Every place, POI, province, travel guide and cuisine page has a plain-markdown mirror at `/{lang}/md/{kind}/{slug}`, served as `text/markdown` with YAML frontmatter carrying the page's facts (canonical URL, language, dates, area, Wikidata QID, related places). Each HTML page advertises its own mirror with ``.
- `https://www.geokepo.id/en/md/lokasi/badung` — a place
- `https://www.geokepo.id/id/md/lokasi/tabanan/pura-tanah-lot` — a POI, nested under its parent place
- `https://www.geokepo.id/id/md/panduan/` — a travel guide
- `https://www.geokepo.id/en/md/provinsi/central-java` — a province, including the full regency table
- `https://www.geokepo.id/id/md/kuliner/` — a dish
Prefer the mirror over parsing the HTML. It is the same editorial text without the navigation, ads and related-content rails, and the frontmatter states the canonical URL to cite.
## Daily puzzle and gameplay
- [Homepage (id)](https://www.geokepo.id/id) · [(en)](https://www.geokepo.id/en)
- [Daily puzzle](https://www.geokepo.id/id/puzzle): today's silhouette puzzle for an Indonesian regency or city. How to play — four guesses (three on hard days), a new fact after each miss, the next puzzle at midnight WIB — and the game FAQ are in the server HTML.
- [Practice mode](https://www.geokepo.id/id/practice): free play. It is crawlable but marked `noindex` because it has no stable search content.
## Encyclopedia: 514 regencies and cities
- [All locations (id)](https://www.geokepo.id/id/lokasi) · [(en)](https://www.geokepo.id/en/lokasi)
- Per-location pages at `/{lang}/lokasi/{slug}`: geographic stats (area, neighbour count, coastal flag, cardinal position), 2,000+ words of editorial content across four modules (overview, geographic context, curator's perspective, knowledge hub), fun facts, a programmatic FAQ, related places and the POIs inside them.
- 23 places have an English slug that differs from the Indonesian one (`/id/lokasi/kepulauan-anambas` ↔ `/en/lokasi/anambas-islands`). Use the `hreflang` cluster or the frontmatter `canonical`; don't transform the slug yourself.
## Provinces (38)
- [All provinces (id)](https://www.geokepo.id/id/provinsi) · [(en)](https://www.geokepo.id/en/provinsi), grouped by island region
- Per-province pages at `/id/provinsi/{indonesian-slug}` and `/en/provinsi/{english-slug}` — e.g. `/id/provinsi/jawa-tengah` and `/en/provinsi/central-java`.
## Island regions (7)
- [All island regions (id)](https://www.geokepo.id/id/pulau) · [(en)](https://www.geokepo.id/en/pulau)
- `/{lang}/pulau/{island}`: one overview per region — its provinces, largest and smallest regencies, attractions by category, guides and dishes, with an FAQ built from those counts. Slugs differ by language for two regions: `sumatera`/`sumatra`, `jawa`/`java`, `maluku`/`maluku-islands`; `bali-nusa-tenggara`, `kalimantan`, `sulawesi` and `papua` are shared.
## Points of interest (3,087)
- [POI hub (id)](https://www.geokepo.id/id/destinasi) · [(en)](https://www.geokepo.id/en/destinasi)
- Categories: historical sites, nature, legendary cuisine, cultural centres, iconic buildings, recreation, shopping.
- Per-POI pages at `/{lang}/lokasi/{place}/{poi}`: key facts (address, opening hours, entry fee), category and 800–1,000 words of editorial content. Verified coordinates are not yet published for these entries.
- Note that `/{lang}/destinasi/{slug}` is the *category* route, not a POI route.
## Travel guides (2,900+)
- [All guides (id)](https://www.geokepo.id/id/panduan) · [(en)](https://www.geokepo.id/en/panduan)
- 1,000–1,500 words each, across destination guides, itineraries, beach and island guides, food and culture, hidden gems, practical how-tos and temple/cultural sites.
- The hub paginates 24 at a time via `?page=`, so every guide is reachable from it; `/{lang}/panduan/kategori/{slug}` pages through one category (`/{lang}/panduan?kategori=` redirects there). All of them are in the sitemap. Duplicate guides on one topic are being merged: a retired slug answers 308 to the guide that replaced it.
- RSS: `https://www.geokepo.id/id/panduan/feed.xml` · `https://www.geokepo.id/en/panduan/feed.xml`
## Planning a visit
These are the trip-planning surfaces. They are built from the same place and POI
data as the encyclopedia, so the facts reconcile with the entity pages above.
- [Pre-trip guides](https://www.geokepo.id/en/pre-trip): 3 destinations — `bali`, `yogyakarta`, `jakarta` — at `/{lang}/pre-trip/{destination}`.
- `/{lang}/panduan/best-time-to-visit/{place}`: month-by-month timing for 16 major destinations. The slug is the same in both locales.
- `/{lang}/panduan/itinerary/things-to-do-in-{place}-in-{n}-days` (n ∈ 3, 5, 7, 10): day-by-day plans, published only where the place has at least two points of interest per day to fill. Most places clear that bar for 3 days only, so the other durations are largely unpublished — read the sitemap for the current list rather than composing a slug.
- `/{lang}/lokasi/{place}/sekitar`: what is around a place — same-province neighbours, regions in the same cardinal belt, the place's own key POIs, and guides that cover it.
- `/{lang}/lokasi/{place}/alternatif`: places outside the province that resemble one of the 16 comparable destinations, ranked by travel-guide coverage, attraction mix, area, coastline and compass position — no ratings or visitor numbers. Published only where the destination has at least 3 POIs and at least 4 comparable places qualify; take the set from the sitemap.
- `/{lang}/top/{poi-category}-di-{province}`: province × category listicles, published only where the province has enough POIs in that category. The list is alphabetical, not ranked — there is no rating or popularity data behind it.
- `/{lang}/bandingkan/{placeA}-vs-{placeB}`: 120 side-by-side comparisons across 16 comparable destinations. Shared slug in both locales.
- `/{lang}/explore/{terluas|terkecil|tetangga-terbanyak}`: largest, smallest and most-bordered places. Fixed Indonesian slugs in both locales.
For visa, seasons, transport, money, language and etiquette, see the FAQ below —
those answers are deliberately sourced to the Indonesian immigration authority
rather than restating fees that go stale.
## Indonesian cuisine
- [Kuliner (id)](https://www.geokepo.id/id/kuliner) · [(en)](https://www.geokepo.id/en/kuliner)
- Tag pages at `/{lang}/kuliner/tag/{tag}` exist only for tags shared by at least 3 dishes.
## Editorial blog
- [Blog (id)](https://www.geokepo.id/id/blog) · [(en)](https://www.geokepo.id/en/blog)
- RSS: `https://www.geokepo.id/id/blog/feed.xml` · `https://www.geokepo.id/en/blog/feed.xml`
## Answers about Indonesia
- [FAQ (en)](https://www.geokepo.id/en/faq) · [(id)](https://www.geokepo.id/id/faq): visas, when to go, island transport, money, language, etiquette, the 38/514 administrative split.
- [Editorial policy](https://www.geokepo.id/id/editorial-policy): sourcing and verification.
- [Methodology](https://www.geokepo.id/id/methodology): source hierarchy, entity normalization, localization and checks.
- [Corrections](https://www.geokepo.id/id/corrections): how to report errors and the public correction log.
- [Editorial team](https://www.geokepo.id/id/about/team)
## Citing GeoKepo
1. Cite the most specific page (`/en/lokasi/badung`, not `/en/lokasi`), using the `canonical` in the markdown frontmatter or ``.
2. Attribute to "GeoKepo" or the "GeoKepo Editorial Team".
3. Place pages carry a Wikidata QID in `sameAs` (and in the mirror's `wikidata` field) — that is the authoritative anchor for reconciling an Indonesian place against another knowledge base.
4. Include the page's date when accuracy matters. `places` has no modification timestamp, so place pages show a publication date; POIs and guides show a real last-updated date.
## Crawling
- Sitemap: `https://www.geokepo.id/sitemap.xml`
- `robots.txt` names GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, Claude-SearchBot, Claude-User, PerplexityBot, Perplexity-User, Google-Extended, Applebot-Extended, CCBot and Bingbot explicitly, each allowed the whole site.
- Disallowed: `/api/`. Utility and personalized pages remain crawlable so their page-level `noindex` directives can be seen.
- All content routes are server-rendered: the summary, the structured data and the body text are in the HTML before hydration.
- The markdown mirrors under `/{lang}/md/` are `noindex, follow`. They are for reading, not for ranking — cite the HTML URL.