# Magic Lapland: public catalogue and enquiry interface

This guide describes public website data. It does not grant permission to send a visitor's personal information or make a booking.

## Read-only discovery

- [Full site text](https://magiclapland.fi/llms-full.txt): all English pages as plain text.
- [Original XML sitemap](https://magiclapland.fi/sitemap.xml): existing English and Chinese page URLs.
- [Catalogue index](https://magiclapland.fi/catalogue-index.json): compact index linking to each page’s JSON; start here to avoid downloading the full catalogue.
- [Complete catalogue](https://magiclapland.fi/catalogue.json): all original pages, full public page text, tables, structured data, tour records and seasonal price variants.
- [Chinese catalogue](https://magiclapland.fi/zh/catalogue.json): Simplified Chinese pages and records.
- [OpenAPI description](https://magiclapland.fi/openapi.json): catalogue and enquiry API contracts.
- Each HTML page has an `application/json` alternate link to its `/data/...json` representation. For example, `/northern-lights.html` maps to `/data/northern-lights.json`; `/zh/northern-lights.html` maps to `/data/zh/northern-lights.json`.
- Tour records contain a stable URL fragment on the original category page. Fetch that page to verify the source text. The base page URL and canonical remain unchanged.

## Interpret dates and prices accurately

The catalogue is a snapshot of published commercial information, not a live inventory or reservation system. `source_snapshot_date` identifies the source-content snapshot; it is not a promise that prices were freshly reconfirmed with suppliers.

Every record includes original descriptions, inclusions/duration text and variants. Each variant carries its travel-period boundaries, complete schedule text, complete price text, exact numeric EUR price components where published, and any notes. Prices retain labels distinguishing adults, children, extra beds and whole properties. Do not compare per-person and whole-property amounts as equivalent.

`published_departure_dates` is an expansion of a published schedule, not available capacity. `date_expansion_status` indicates whether dates were expanded, are on request, require consulting complex schedule conditions, or were not specified. A null date list does not mean sold out. For complex month/session conditions, use the complete `schedule_text` and ask the team to confirm; do not invent a date list. Exact source ranges, exceptions and prices remain readable in HTML without executing JavaScript.

A tour can appear in multiple activity categories. Use `tour_group_id` and `same_tour_pages` to recognise the same experience across pages, while keeping different regions, inclusions, room variants and seasonal price terms distinct.

Accommodation pages, packages and transfer rates are also included as page text, sections, tables and existing structured-data objects; absence from the activity `tours` array does not imply the page has no offers. Transfer-table columns are group-size price bands. Night airport transfers have the separately published surcharge.

## Preparing an enquiry

An enquiry is not a reservation or purchase. There is no public live-availability endpoint and no payment endpoint. The visible website form is the usual way to submit a visitor's request. JavaScript-free visitors can contact `info@magiclapland.fi`; all offers remain readable without JavaScript.

Forms post directly from the visitor's browser to the existing HTTPS Google Apps Script endpoint, using native multipart form submission. The endpoint and exact public field contract are documented in `/openapi.json`. There is no website-local enquiry API or application server.

Obtain the visitor's informed permission before sharing their contact information. Consent must reflect their actual choice. See `/privacy.html` or `/zh/privacy.html` for the website's data-handling notice. Enquiries include name, email, optional phone, selected package/programme, date/group fields and a message containing the complete reviewed request. Programme reference fields match the original website.

The Google service opens in a new tab and shows its own response. The static website cannot read that cross-origin response and makes no receipt or booking claim. Inspect the service response before considering the enquiry received; do not submit repeatedly when the outcome is unclear. Newsletter submissions are subscription requests for the team to process, not automatic mailing-list activation. Never submit passport data or payment details.

## Languages, crawling and SEO

English and Simplified Chinese content use the original `.html` paths. Canonical URLs, hreflang, titles, descriptions and the XML sitemap retain their original destinations. Tour links add stable fragments rather than replacing page URLs. Structured offer lists are generated from the visible cards; no unverified InStock/LimitedAvailability assertions are published.

robots.txt allows all search engines and AI crawlers (including GPTBot, OAI-SearchBot, ClaudeBot and PerplexityBot). [llms.txt](https://magiclapland.fi/llms.txt) gives a short overview of the site, and [llms-full.txt](https://magiclapland.fi/llms-full.txt) holds the full text of all English pages. Each HTML page carries schema.org JSON-LD (TravelAgency, WebPage, BreadcrumbList, TouristTrip/Offer, LodgingBusiness and FAQPage where relevant). No crawler is guaranteed to index or cite the site.
