# GeoKepo — Full LLM Index > A deeper machine-readable index than `/llms.txt`: entity-resolution rules, the structured data each page type emits, category hubs, and the traps that will otherwise cost you a wrong URL. GeoKepo is a bilingual (Indonesian / English) reference site covering all 514 regencies and cities across Indonesia's 38 provinces, plus 3,087 points of interest, 2,815 travel guides and regional cuisine. Operated by the GeoKepo Editorial Team (admin@geokepo.id). Every URL is locale-prefixed: `/id/` (Bahasa Indonesia, the source language) and `/en/` (English). English content exists wherever `is_translated` is set and falls back to Indonesian otherwise. ## Entity resolution Places, POIs, provinces, cuisines and travel guides are identified by stable URL slugs. **The `@id` of an entity is locale-specific.** `/id/lokasi/kabupaten-badung#place` and `/en/lokasi/badung-regency#place` are two nodes describing the same real-world place in two languages, linked by reciprocal `hreflang`. Do not treat them as one node, and do not strip the locale prefix to "normalise" them. **Slugs are not derivable across languages.** 23 places and 1,313 POIs have an English slug that differs from the Indonesian one, and most provinces do (`jawa-tengah` → `central-java`). Read the other language's URL from the `hreflang` cluster or the markdown frontmatter. Transforming a slug yourself will produce a URL that either 404s or resolves to a non-canonical duplicate. **Wikidata is the external anchor.** A place's database primary key IS its Wikidata QID, emitted as `sameAs` on the page and as `wikidata` in the markdown mirror: `https://www.wikidata.org/wiki/`. Use it when reconciling against another knowledge base. OpenStreetMap relations back the geometry and Indonesian government statistics (BPS) back the administrative data; both are described on `/{lang}/editorial-policy`. ## Markdown mirrors — read these first `/{lang}/md/{kind}/{slug}` returns `text/markdown; charset=utf-8`: YAML frontmatter followed by the page's editorial body, with no navigation, ads or related-content rails. Every HTML page links its own mirror via ``. | Kind | Example | Frontmatter includes | | --- | --- | --- | | `lokasi` | `/en/md/lokasi/badung-regency` | province, area_km2, is_coastal, neighbor_count, rarity, aliases, wikidata, published | | `lokasi` (POI) | `/id/md/lokasi/kabupaten-tabanan/pura-tanah-lot` | category, located_in, province, latitude, longitude, updated | | `panduan` | `/id/md/panduan/` | category, guide_type, covers (place URLs), published, updated | | `provinsi` | `/en/md/provinsi/central-java` | country, place_count; body includes the full regency table | | `kuliner` | `/id/md/kuliner/` | origin_province, ingredients, tags | Every mirror's frontmatter carries `canonical` — the HTML URL to cite. The mirrors themselves are `noindex, follow`. ## Structured data by page type - **Place** (`/{lang}/lokasi/{slug}`) — `Place` + `AdministrativeArea` + `Article` in one node, plus `BreadcrumbList` and a `FAQPage` generated from the place's own metadata. Carries `area` as a `QuantitativeValue` in km², `additionalProperty` entries for cardinal position / coastal flag / neighbour count, and `sameAs` → Wikidata. - **POI** (`/{lang}/lokasi/{place}/{poi}`) — `TouristAttraction` + `Article`, with `GeoCoordinates`, `containedInPlace` pointing at the parent place's `@id`, and a `FAQPage` built from its key facts (opening hours, entry fee, address). - **Province** (`/{lang}/provinsi/{slug}`) — `AdministrativeArea` with `containedInPlace` Indonesia and a `regencyAndCityCount` property. - **Travel guide** (`/{lang}/panduan/{slug}`) — `Article` + `TravelGuide`, `mentions` linking the `@id` of each place it covers, plus `FAQPage` when the body is question-shaped and `HowTo` when it is a day-by-day itinerary. - **Cuisine** (`/{lang}/kuliner/{slug}`) — `Recipe` + `Article`, origin province as `locationCreated`. - **Blog** (`/{lang}/blog/{slug}`) — `Article`, authored by the editorial team `Person` entity, published by the GeoKepo `Organization`. - **Site-wide** — `Organization` (`#organization`), `WebSite` (`#website`, with a `SearchAction` targeting `/{lang}/cari?q=`) and the editorial team `Person` (`#editorial-team`). Every entity node states `inLanguage` as a single language matching the page it is on, and `mainEntityOfPage` is byte-identical to the page's ``. Place, POI and guide nodes mark their summary paragraph with `speakable` (`cssSelector: ["[data-tldr]"]`). ## Editorial standards - Place, POI and travel-guide pages open with a one-paragraph summary marked `data-tldr="true"` — safe to lift verbatim as an extract. - Dates: `places` has no modification timestamp, so place pages show a **publication** date. `points_of_interest` and `travel_guides` show a real last-updated date. - `/{lang}/editorial-policy` documents sourcing and verification; `/{lang}/about/team` is the editorial team profile. - Content is written by the GeoKepo Editorial Team. Sponsored travel guides are labelled in the page body and in the `Article` schema. ## Category hubs (start here) ### Encyclopedia - `https://www.geokepo.id/{lang}/lokasi` — 514 places - `https://www.geokepo.id/{lang}/provinsi` — 38 provinces - Facets: `/{lang}/lokasi/rarity/{epic|rare|common}`, `/{lang}/lokasi/jenis/{pesisir|pedalaman|pulau}`, `/{lang}/lokasi/abjad/{letter}` ### Destinations and POIs - `https://www.geokepo.id/{lang}/destinasi` — hub - `/{lang}/destinasi/situs-sejarah` — historical sites - `/{lang}/destinasi/wisata-alam` — nature - `/{lang}/destinasi/kuliner-legendaris` — legendary food spots - `/{lang}/destinasi/pusat-kebudayaan` — cultural centres - `/{lang}/destinasi/bangunan-ikonik` — iconic buildings - `/{lang}/destinasi/tempat-rekreasi` — recreation - `/{lang}/destinasi/pusat-perbelanjaan` — shopping TRAP: `/{lang}/destinasi/{slug}` is the **category** route. An individual POI lives at `/{lang}/lokasi/{place}/{poi}`, and a POI slug will 404 under `/destinasi`. ### Travel guides - `https://www.geokepo.id/{lang}/panduan` — hub, listing the 1,000 most recent of 2,815 - `/{lang}/panduan/kategori/{slug}` — paginated per category; this is how to reach the other ~1,800 - `/{lang}/panduan/itinerary/{slug}`, `/{lang}/panduan/best-time-to-visit/{slug}` - RSS: `/{lang}/panduan/feed.xml` ### Cuisine - `https://www.geokepo.id/{lang}/kuliner` and `/{lang}/kuliner/tag/{tag-slug}` ### Programmatic surfaces - `/{lang}/bandingkan/{placeA}-vs-{placeB}` — side-by-side comparisons - `/{lang}/top/{category}-di-{province}` — province × category listicles - `/{lang}/pre-trip/{destination}` — pre-trip planning - `/{lang}/explore` and `/{lang}/explore/{slug}` — superlative rankings ### Reference - `/{lang}/faq` — questions about visiting Indonesia (visas, seasons, island transport, money, language, etiquette) and about the site - `/{lang}/blog` — editorial articles, RSS at `/{lang}/blog/feed.xml` - `/{lang}/cari` — site-wide search across places, POIs and guides (`noindex, follow`) ## Citation guidance 1. Cite the most specific page, not a hub: `/en/lokasi/badung-regency`, not `/en/lokasi`. 2. Take the URL from `canonical` — in the markdown frontmatter, or `` in the HTML. Do not construct it. 3. Attribute to "GeoKepo" or the "GeoKepo Editorial Team". 4. For Indonesian place facts (area, neighbours, coastal status), the Wikidata QID in `sameAs` is the authoritative anchor. 5. Quote the page's own language. The Indonesian and English renderings are separate documents with separate `@id`s, and the English one is a real editorial translation rather than a machine rendering of the Indonesian. ## Crawling - Sitemap: `https://www.geokepo.id/sitemap.xml` — bilingual, with reciprocal `hreflang` per entry, regenerated daily. - `robots.txt` names GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, Claude-SearchBot, Claude-User, PerplexityBot, Perplexity-User, Google-Extended, Applebot-Extended, CCBot and Bingbot, each allowed the whole site. - Disallowed for everyone: `/api/`, `/*/practice`, `/*/duel/`, `/*/my-trip`, `/*/cari`. - All content routes are server-rendered — summary, structured data and body text are present before hydration. No content is behind a login; the game keeps per-visitor state, but the encyclopedia is fully public.