{"id":31353,"date":"2026-07-09T18:00:02","date_gmt":"2026-07-09T16:00:02","guid":{"rendered":"https:\/\/wordlift.io\/blog\/en\/?p=31353"},"modified":"2026-07-09T18:00:48","modified_gmt":"2026-07-09T16:00:48","slug":"from-travel-website-to-agentic-storefront","status":"publish","type":"post","link":"https:\/\/wordlift.io\/blog\/en\/from-travel-website-to-agentic-storefront\/","title":{"rendered":"From Travel Website to Agentic Storefront"},"content":{"rendered":"\n<h1 class=\"wp-block-heading\">How alpina.travel uses Astro, GitHub, and an RDF Knowledge Graph<\/h1>\n\n\n\n<p>Tourism is entering a new discovery phase.<\/p>\n\n\n\n<p>For twenty years, travel operators optimized for two audiences: search engines and human visitors. They built websites, landing pages, booking flows, galleries, destination guides, and blog posts. The best sites were fast, beautiful, mobile-friendly, and ranked well on Google.<\/p>\n\n\n\n<p>That still matters. But the next visitor to a travel website may not be a person browsing a menu. It may be an AI agent asking:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>We&#8217;re taking the kids to the Austrian Alps this winter and want an apartment near a gentle ski area, with a lake, some easy hikes for the off-days, and good food within reach. Which places are actually worth it, and how do a few compare?<\/p>\n<\/blockquote>\n\n\n\n<p>That single shift changes the architecture of travel websites. A traditional CMS is designed around humans publishing pages. An agentic storefront is designed around entities, relationships, evidence, and machine-readable actions.<\/p>\n\n\n\n<p>This is the idea behind <strong><a href=\"https:\/\/alpina.travel\" target=\"_blank\" rel=\"noreferrer noopener\">alpina.travel<\/a><\/strong>, a small, family-run alpine travel project we are building with <a class=\"wl-entity-page-link\"  href=\"https:\/\/wordlift.io\/blog\/en\/entity\/astro\/\" data-id=\"http:\/\/data.wordlift.io\/wl0216\/entity\/astro;http:\/\/www.wikidata.org\/entity\/Q114769542;https:\/\/docs.astro.build\/en\/guides\/integrations-guide\/cloudflare\/\" >Astro<\/a>, GitHub, AI agents, and WordLift&#8217;s RDF Knowledge Graph. It stays a simple travel website for people. For agents, it now exposes a full, standards-based surface they can discover, read, and query.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"1024\" src=\"https:\/\/wordlift.io\/blog\/en\/wp-content\/uploads\/sites\/3\/2026\/07\/ChatGPT-Image-Jul-9-2026-12_25_15-PM-1024x1024.png\" alt=\"\" class=\"wp-image-31359\" srcset=\"https:\/\/wordlift.io\/blog\/en\/wp-content\/uploads\/sites\/3\/2026\/07\/ChatGPT-Image-Jul-9-2026-12_25_15-PM-1024x1024.png 1024w, https:\/\/wordlift.io\/blog\/en\/wp-content\/uploads\/sites\/3\/2026\/07\/ChatGPT-Image-Jul-9-2026-12_25_15-PM-300x300.png 300w, https:\/\/wordlift.io\/blog\/en\/wp-content\/uploads\/sites\/3\/2026\/07\/ChatGPT-Image-Jul-9-2026-12_25_15-PM-150x150.png 150w, https:\/\/wordlift.io\/blog\/en\/wp-content\/uploads\/sites\/3\/2026\/07\/ChatGPT-Image-Jul-9-2026-12_25_15-PM-768x768.png 768w, https:\/\/wordlift.io\/blog\/en\/wp-content\/uploads\/sites\/3\/2026\/07\/ChatGPT-Image-Jul-9-2026-12_25_15-PM-1200x1200.png 1200w, https:\/\/wordlift.io\/blog\/en\/wp-content\/uploads\/sites\/3\/2026\/07\/ChatGPT-Image-Jul-9-2026-12_25_15-PM-96x96.png 96w, https:\/\/wordlift.io\/blog\/en\/wp-content\/uploads\/sites\/3\/2026\/07\/ChatGPT-Image-Jul-9-2026-12_25_15-PM.png 1254w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Joost Got Here First: Astro as an Agent-Ready SEO Stack<\/h2>\n\n\n\n<p><strong>Joost de Valk<\/strong> recently published a <a href=\"https:\/\/joost.blog\/astro-seo-complete-guide\/\">definitive guide to Astro SEO<\/a>, and his argument lines up with where the market is heading: Astro gives us a cleaner, faster, more controllable foundation than a traditional CMS. As he puts it, &#8220;the baseline is already fast because there&#8217;s nothing slow to do.&#8221;<\/p>\n\n\n\n<p>That matters more than it used to, because performance is no longer only a human UX concern. AI agents also operate under latency, retrieval, and inference-cost constraints. Fast, clean, static or hybrid HTML is easier to crawl, parse, cache, and reason over.<\/p>\n\n\n\n<p>Joost is also right about <a class=\"wl-entity-page-link\" title=\"Schema &amp; Structured Data for WP &amp; AMP\" href=\"https:\/\/wordlift.io\/blog\/en\/entity\/schema-structured-data-for-wp-amp\/\" data-id=\"http:\/\/data.wordlift.io\/wl0216\/entity\/schema-structured-data-for-wp-amp-20577;https:\/\/wordpress.org\/plugins\/schema-and-structured-data-for-wp\/;https:\/\/structured-data-for-wp.com\/\" >structured data<\/a>. The problem on most sites is that their markup is a single isolated object, one <code>Article<\/code> or <code>WebPage<\/code> node  that never describes how things actually connect: who wrote the article, what site it lives on, what organization stands behind it. His answer is a linked <code>@graph<\/code> wired together with <code>@id<\/code> references so an agent can walk the relationships, packaged in <code>@jdevalk\/seo-graph<\/code>. His recipes even include a <code>VacationRental<\/code> with a <code>RentAction<\/code> \u2014 the exact shape a project like ours needs.<\/p>\n\n\n\n<p>This is where WordLift extends the pattern. Joost&#8217;s Astro stack produces a strong <em>page-level<\/em> graph. WordLift adds the missing infrastructure underneath it: a persistent RDF Knowledge Graph as the single source of truth, where that <code>VacationRental<\/code> is not re-declared page by page but exists once, with a stable identity, connected to everything around it. And that is the deeper shift: out of the page paradigm altogether. The human-centered web is organized around pages; a Knowledge Graph is organized around a contextual graph of entities, relationships, and evidence. You stop composing pages and start modeling the context and evidence an AI needs to reason over your content and act on it.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The Knowledge Graph Comes First<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"640\" src=\"https:\/\/wordlift.io\/blog\/en\/wp-content\/uploads\/sites\/3\/2026\/07\/ChatGPT-Image-Jul-9-2026-12_03_58-PM-1-1024x640.png\" alt=\"\" class=\"wp-image-31358\" srcset=\"https:\/\/wordlift.io\/blog\/en\/wp-content\/uploads\/sites\/3\/2026\/07\/ChatGPT-Image-Jul-9-2026-12_03_58-PM-1-1024x640.png 1024w, https:\/\/wordlift.io\/blog\/en\/wp-content\/uploads\/sites\/3\/2026\/07\/ChatGPT-Image-Jul-9-2026-12_03_58-PM-1-300x188.png 300w, https:\/\/wordlift.io\/blog\/en\/wp-content\/uploads\/sites\/3\/2026\/07\/ChatGPT-Image-Jul-9-2026-12_03_58-PM-1-768x480.png 768w, https:\/\/wordlift.io\/blog\/en\/wp-content\/uploads\/sites\/3\/2026\/07\/ChatGPT-Image-Jul-9-2026-12_03_58-PM-1-1536x961.png 1536w, https:\/\/wordlift.io\/blog\/en\/wp-content\/uploads\/sites\/3\/2026\/07\/ChatGPT-Image-Jul-9-2026-12_03_58-PM-1-150x94.png 150w, https:\/\/wordlift.io\/blog\/en\/wp-content\/uploads\/sites\/3\/2026\/07\/ChatGPT-Image-Jul-9-2026-12_03_58-PM-1.png 1586w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>alpina.travel is not a website where structured data is bolted on after the page is written. It is the opposite. The Knowledge Graph defines the world first, and the website is generated from it.<\/p>\n\n\n\n<p>The graph holds the entities that matter to a travel operator: <code>Organization<\/code>, <code>WebSite<\/code>, <code>VacationRental<\/code>, <code>LodgingBusiness<\/code>, <code>Place<\/code>, <code>TouristDestination<\/code>, <code>TouristAttraction<\/code>, <code>SkiResort<\/code>, <code>LakeBodyOfWater<\/code>, <code>Restaurant<\/code>, <code>SportsActivityLocation<\/code>, <code>GeoCoordinates<\/code>, <code>Article<\/code>, <code>ImageObject<\/code>, <code>VideoObject<\/code>.<\/p>\n\n\n\n<p>These are not isolated schema snippets. They are connected entities. A vacation rental is located in a place. A place belongs to a destination. A destination contains attractions. Attractions have coordinates. Images depict places and experiences. Articles explain what the entities mean. The organization publishes and validates the whole thing.<\/p>\n\n\n\n<p>That is the difference between a travel website and a travel Knowledge Graph. A CMS stores pages. A Knowledge Graph stores the meaning behind the offering.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The Real Architecture: GitHub \u2192 WordLift KG \u2192 Astro \u2192 Cloudflare<\/h2>\n\n\n\n<p>alpina.travel is a KG-first, agent-ready stack. The RDF Knowledge Graph is the semantic source of truth, Astro is the rendering layer, GitHub is the governed workspace where an AI agent manages data safely, and Cloudflare is the edge.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>AI agent working in GitHub\n        \u2193\nStructured YAML, Markdown, media metadata, validation scripts\n        \u2193\nSync to the WordLift RDF Knowledge Graph\n        \u2193\nWordLift KG becomes the canonical semantic layer\n        \u2193\nAstro fetches KG data and renders fast static pages + agent endpoints\n        \u2193\nCloudflare delivers the human site and the agent-facing surface\n<\/code><\/pre>\n\n\n\n<p>The distinction that matters: we do not add schema markup after publishing pages. We model the travel world first, then render the website from that model.<\/p>\n\n\n\n<p><strong>GitHub is the editorial and data-staging layer; not the source of truth.<\/strong> It holds source content, structured YAML\/JSON, Markdown, image metadata, validation scripts, and build logic. Changes move through commits and pull requests, which gives the AI agent a controlled environment instead of letting it mutate production data directly. The repo makes this explicit: <code>entities.yaml<\/code> is described as an editorial staging representation, with WordLift as the semantic source of truth once synced.<\/p>\n\n\n\n<p><strong>WordLift is the canonical semantic layer.<\/strong> It owns the entities, relationships, schema.org mappings, <code>sameAs<\/code> links, structured data, and KG summaries. The repo is deliberate about not standing up a parallel, hard-coded schema layer except as a temporary fallback.<\/p>\n\n\n\n<p><strong>Astro is the rendering layer.<\/strong> It produces static pages, JSON endpoints, <code>llms.txt<\/code>, agent-facing Markdown, and, as we&#8217;ll see, the discovery metadata and well-known entrypoints that make the site legible to agents.<\/p>\n\n\n\n<p><strong>Cloudflare is the edge layer.<\/strong> The project is configured for static Astro output with the Cloudflare adapter, MDX, and sitemap integration.<\/p>\n\n\n\n<p>Astro does not own the data. Astro renders the experience. The Knowledge Graph owns the meaning, and it exports that meaning to language models: enhanced entity pages rooted in the <a class=\"wl-entity-page-link\" title=\"Linked Data\" href=\"https:\/\/wordlift.io\/blog\/en\/entity\/linked-data\/\" data-id=\"http:\/\/data.wordlift.io\/wl0216\/entity\/linked_data;http:\/\/rdf.freebase.com\/ns\/m.02r2kb1;http:\/\/yago-knowledge.org\/resource\/Linked_data;http:\/\/dbpedia.org\/resource\/Linked_data;http:\/\/data.redlink.io\/91\/be9\/entity\/linked_data\" >linked-data<\/a> stack, and tools an agent can call to traverse the graph itself.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What the AI Agent Actually Manages<\/h2>\n\n\n\n<p>The AI agent does not simply write copy. It manages structured travel knowledge under human supervision.<\/p>\n\n\n\n<p>For Lungau, the canonical entity registry already includes Alpina.travel, Mountain Nests Rentals, Lungau, Mariapfarr, Pichl, Samspitze 2, Prebersee, Fanningberg, Grosseck-Speiereck, Katschberg, Obertauern, Mauterndorf, Tamsweg, Zederhaus, and Gambswirt, along with itineraries, guides, and travel need-states. Each lives under a stable identifier in the WordLift dataset <code>wl01855<\/code>; the village of Mariapfarr, for example, is <a href=\"https:\/\/data.wordlift.io\/wl01855\/mariapfarr.html?__wl_experiment=data_entity_page\"><code>https:\/\/data.wordlift.io\/wl01855\/mariapfarr<\/code><\/a>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"1024\" src=\"https:\/\/wordlift.io\/blog\/en\/wp-content\/uploads\/sites\/3\/2026\/07\/ChatGPT-Image-Jul-9-2026-02_34_38-PM-1024x1024.png\" alt=\"\" class=\"wp-image-31365\" srcset=\"https:\/\/wordlift.io\/blog\/en\/wp-content\/uploads\/sites\/3\/2026\/07\/ChatGPT-Image-Jul-9-2026-02_34_38-PM-1024x1024.png 1024w, https:\/\/wordlift.io\/blog\/en\/wp-content\/uploads\/sites\/3\/2026\/07\/ChatGPT-Image-Jul-9-2026-02_34_38-PM-300x300.png 300w, https:\/\/wordlift.io\/blog\/en\/wp-content\/uploads\/sites\/3\/2026\/07\/ChatGPT-Image-Jul-9-2026-02_34_38-PM-150x150.png 150w, https:\/\/wordlift.io\/blog\/en\/wp-content\/uploads\/sites\/3\/2026\/07\/ChatGPT-Image-Jul-9-2026-02_34_38-PM-768x768.png 768w, https:\/\/wordlift.io\/blog\/en\/wp-content\/uploads\/sites\/3\/2026\/07\/ChatGPT-Image-Jul-9-2026-02_34_38-PM-1200x1200.png 1200w, https:\/\/wordlift.io\/blog\/en\/wp-content\/uploads\/sites\/3\/2026\/07\/ChatGPT-Image-Jul-9-2026-02_34_38-PM-96x96.png 96w, https:\/\/wordlift.io\/blog\/en\/wp-content\/uploads\/sites\/3\/2026\/07\/ChatGPT-Image-Jul-9-2026-02_34_38-PM.png 1254w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>The apartment itself, Samspitze 2, is modeled as both <code>VacationRental<\/code> and <code>LodgingBusiness<\/code>, with coordinates, a booking URL, guest capacity, bedrooms, bathrooms, media, and a verified date. The property page carries the facts a human or an agent would actually ask for: it sleeps up to six guests, has two bedrooms, two bathrooms and 68 m\u00b2, Wi-Fi, a balcony, a kitchen, parking, and a shared sauna, and it suits families, ski weekends, summer hiking, and longer alpine stays.<\/p>\n\n\n\n<p>The relationships file turns those facts into graph structure:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Samspitze 2          \u2192 locatedIn          \u2192 Mariapfarr\nSamspitze 2          \u2192 provider           \u2192 Mountain Nests Rentals\nMariapfarr           \u2192 partOf             \u2192 Lungau\nSamspitze 2          \u2192 bestFor            \u2192 FamilyHoliday\nSamspitze 2          \u2192 supportsItinerary  \u2192 3 Days with Kids\nSamspitze 2          \u2192 supportsItinerary  \u2192 Winter Weekend\nPrebersee            \u2192 suitableFor        \u2192 QuietNature\nWinter Weekend       \u2192 includesPlace      \u2192 Fanningberg\nSummer Lake Weekend  \u2192 includesPlace      \u2192 Prebersee\n<\/code><\/pre>\n\n\n\n<p>These are not menu labels. They are machine-traversable relationships.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">How Data Moves into the Knowledge Graph<\/h2>\n\n\n\n<p>A sync script converts the staged YAML into an RDF graph and pushes it to WordLift through the WordLift client, carrying schema.org types, geo coordinates, <code>sameAs<\/code> links, canonical URLs, media, videos, and relationships.<\/p>\n\n\n\n<p>The script maps local predicates onto schema.org properties:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>locatedIn \/ partOf     \u2192 schema:containedInPlace\nbestFor \/ suitableFor  \u2192 schema:audience\nincludesPlace          \u2192 schema:containsPlace\nhasBase                \u2192 schema:location\nsupportsItinerary      \u2192 schema:subjectOf\n<\/code><\/pre>\n\n\n\n<p>That mapping is the bridge between editorial staging and semantic infrastructure. The graph is then serialized as Turtle and sent to WordLift via <code>create_or_update_entities<\/code>.<\/p>\n\n\n\n<p>A manual GitHub Action handles the sync. It currently defaults to dry-run: it installs Python, runs the sync script, exports a KG snapshot, and uploads it as an artifact.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">How Astro Consumes the Knowledge Graph<\/h2>\n\n\n\n<p>At build time, Astro calls the WordLift Data API for each page URL:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>https:&#47;&#47;api.wordlift.io\/data\/https\/{host}{path}\n<\/code><\/pre>\n\n\n\n<p>If the KG returns <a class=\"wl-entity-page-link\" title=\"JSON\/LD\" href=\"https:\/\/wordlift.io\/blog\/en\/entity\/json-ld\/\" data-id=\"http:\/\/data.wordlift.io\/wl0216\/entity\/json-ld;http:\/\/rdf.freebase.com\/ns\/m.0hzq_55;http:\/\/dbpedia.org\/resource\/JSON-LD;http:\/\/de.dbpedia.org\/resource\/JSON-LD;http:\/\/en.dbpedia.org\/resource\/JSON-LD;http:\/\/nl.dbpedia.org\/resource\/JSON-LD\" >JSON-LD<\/a>, Astro injects it into the initial HTML. If the KG has no data for that URL yet, the site falls back to a locally generated graph, so the build stays resilient. The code comment is blunt about the intent: WordLift stays the source of truth once populated. On top of the inline JSON-LD, every page also emits the discovery links described in the next section, so an agent can find the graph even without parsing the body.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The Agentic Storefront: A Standards-Based Surface for AI Agents<\/h2>\n\n\n\n<p>The agentic storefront is a sidecar, not the whole website: the same Knowledge Graph, exposed to agents through dedicated interfaces. What changed recently is that this surface is no longer a handful of files. It is built on the open standards that are becoming the agent web&#8217;s equivalent of <code>robots.txt<\/code> and <code>sitemap.xml<\/code>: <a href=\"https:\/\/www.rfc-editor.org\/info\/rfc8288\">RFC 8288<\/a> Web Linking, <a href=\"https:\/\/www.rfc-editor.org\/info\/rfc9727\">RFC 9727<\/a> API Catalog, the <a class=\"wl-entity-page-link\" title=\"Model Context Protocol (MCP)\" href=\"https:\/\/wordlift.io\/blog\/en\/entity\/model-context-protocol\/\" data-id=\"http:\/\/data.wordlift.io\/wl0216\/entity\/model-context-protocol-mcp-29177\" >Model Context Protocol (MCP<\/a>), and the Agent2Agent (A2A) agent card.<\/p>\n\n\n\n<p>Think of it as five moves an agent makes, in order.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"1024\" src=\"https:\/\/wordlift.io\/blog\/en\/wp-content\/uploads\/sites\/3\/2026\/07\/ChatGPT-Image-Jul-9-2026-02_31_51-PM-1-1024x1024.png\" alt=\"\" class=\"wp-image-31362\" srcset=\"https:\/\/wordlift.io\/blog\/en\/wp-content\/uploads\/sites\/3\/2026\/07\/ChatGPT-Image-Jul-9-2026-02_31_51-PM-1-1024x1024.png 1024w, https:\/\/wordlift.io\/blog\/en\/wp-content\/uploads\/sites\/3\/2026\/07\/ChatGPT-Image-Jul-9-2026-02_31_51-PM-1-300x300.png 300w, https:\/\/wordlift.io\/blog\/en\/wp-content\/uploads\/sites\/3\/2026\/07\/ChatGPT-Image-Jul-9-2026-02_31_51-PM-1-150x150.png 150w, https:\/\/wordlift.io\/blog\/en\/wp-content\/uploads\/sites\/3\/2026\/07\/ChatGPT-Image-Jul-9-2026-02_31_51-PM-1-768x768.png 768w, https:\/\/wordlift.io\/blog\/en\/wp-content\/uploads\/sites\/3\/2026\/07\/ChatGPT-Image-Jul-9-2026-02_31_51-PM-1-1200x1200.png 1200w, https:\/\/wordlift.io\/blog\/en\/wp-content\/uploads\/sites\/3\/2026\/07\/ChatGPT-Image-Jul-9-2026-02_31_51-PM-1-96x96.png 96w, https:\/\/wordlift.io\/blog\/en\/wp-content\/uploads\/sites\/3\/2026\/07\/ChatGPT-Image-Jul-9-2026-02_31_51-PM-1.png 1254w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">1. Discovery: how an agent finds the door<\/h3>\n\n\n\n<p>Two mechanisms, both standards-based, so nothing here is proprietary to us.<\/p>\n\n\n\n<p>First, every response carries HTTP <code>Link<\/code> headers (RFC 8288), configured in <code>_headers<\/code>, advertising the machine surface before an agent parses a single byte of HTML. This is the actual header returned by <code>\/lungau\/<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>link: &lt;\/llms.txt&gt;; rel=\"llms-txt\"; type=\"text\/plain\",\n      &lt;\/.well-known\/api-catalog&gt;; rel=\"api-catalog\"; type=\"application\/linkset+json\",\n      &lt;\/.well-known\/agent-card.json&gt;; rel=\"service-desc\"; type=\"application\/json\",\n      &lt;\/.well-known\/mcp\/server-card.json&gt;; rel=\"service-desc\"; type=\"application\/json\",\n      &lt;\/.well-known\/ucp&gt;; rel=\"service-desc\"; type=\"application\/json\",\n      &lt;\/acp\/feed&gt;; rel=\"describedby\"; type=\"application\/json\",\n      &lt;\/okf\/index.md&gt;; rel=\"describedby\"; type=\"text\/markdown\",\n      &lt;\/sitemap-index.xml&gt;; rel=\"sitemap\"; type=\"application\/xml\"\n<\/code><\/pre>\n\n\n\n<p>In one header an agent learns the whole surface: the plain-text <code>llms.txt<\/code>, the API catalog, the MCP server card, the A2A agent card, a commerce profile (UCP), an agent-commerce feed (<a class=\"wl-entity-page-link\" title=\"ACP (Agentic Commerce Protocol)\" href=\"https:\/\/wordlift.io\/blog\/en\/entity\/agentic-commerce-protocol\/\" data-id=\"http:\/\/data.wordlift.io\/wl0216\/entity\/acp-29930\" >ACP<\/a>), a Markdown knowledge feed (OKF), and the sitemap.<\/p>\n\n\n\n<p>Second, the RFC 9727 catalog at <code>\/.well-known\/api-catalog<\/code> returns a single <code>application\/linkset+json<\/code> document listing every API the site exposes: the machine-readable index of the whole surface. Each entry has an <code>anchor<\/code> (the resource), optional <code>service-desc<\/code> links (machine descriptions), <code>service-doc<\/code> links (human docs), and <code>item<\/code> links (the concrete data or endpoints). Excerpted from the live catalog:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n  \"linkset\": &#91;\n    {\n      \"anchor\": \"https:\/\/alpina.travel\/lungau\/data\/\",\n      \"service-doc\": &#91;\n        { \"href\": \"https:\/\/alpina.travel\/lungau\/agent-guide.md\", \"type\": \"text\/markdown\" },\n        { \"href\": \"https:\/\/alpina.travel\/llms.txt\", \"type\": \"text\/plain\" }\n      ],\n      \"item\": &#91;\n        { \"href\": \"https:\/\/alpina.travel\/lungau\/data\/apartments.json\",  \"type\": \"application\/json\" },\n        { \"href\": \"https:\/\/alpina.travel\/lungau\/data\/places.json\",      \"type\": \"application\/json\" },\n        { \"href\": \"https:\/\/alpina.travel\/lungau\/data\/itineraries.json\", \"type\": \"application\/json\" },\n        { \"href\": \"https:\/\/alpina.travel\/lungau\/data\/guides.json\",      \"type\": \"application\/json\" }\n      ]\n    },\n    {\n      \"anchor\": \"https:\/\/alpina.travel\/\",\n      \"service-desc\": &#91;\n        { \"href\": \"https:\/\/alpina.travel\/.well-known\/ucp\", \"type\": \"application\/json\" }\n      ],\n      \"item\": &#91;\n        { \"href\": \"https:\/\/alpina.travel\/acp\/feed\",     \"type\": \"application\/json\" },\n        { \"href\": \"https:\/\/alpina.travel\/ask\",          \"type\": \"application\/json\" },\n        { \"href\": \"https:\/\/alpina.travel\/okf\/index.md\", \"type\": \"text\/markdown\" }\n      ]\n    }\n    \/\/ \u2026plus anchors for \/mcp\/sse (\u2192 the MCP server card) and the A2A agent card\n  ]\n}\n<\/code><\/pre>\n\n\n\n<p>One fetch, and an agent has the destination&#8217;s data files, its query endpoint, its feeds, and its transport: no HTML scraping, no guessing paths.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2. Description: every page tied back to the graph<\/h3>\n\n\n\n<p>Discovery finds the site; description tells an agent what each page <em>is<\/em>. Every page emits two links, wired in <code>BaseLayout.astro<\/code> via a helper in <code>normalize.ts<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;link rel=\"about\" href=\"https:\/\/data.wordlift.io\/wl01855\/lungau\"&gt;\n&lt;link rel=\"alternate\" type=\"application\/ld+json\"\n      href=\"https:\/\/api.wordlift.io\/data\/https\/alpina.travel\/lungau\/\"\n      title=\"WordLift Data API \u2014 structured data\"&gt;\n<\/code><\/pre>\n\n\n\n<p>The <code>rel=\"about\"<\/code> link declares, by stable identifier, which entity the page represents \u2014 the same <code>wl01855<\/code> node the graph and the <code>\/ask<\/code> endpoint use. The <code>rel=\"alternate\"<\/code> link gives the page&#8217;s structured data a canonical, fetchable address on the WordLift Data API, instead of only inlining it in the <code>&lt;head&gt;<\/code>.<\/p>\n\n\n\n<p>This is the small detail that does the heavy lifting. An agent that lands on <code>\/lungau\/<\/code> doesn&#8217;t have to scrape the page \u2014 it follows one link to a live, canonical JSON-LD graph, and the <code>about<\/code> identifier tells it exactly which entity that graph is centered on. The HTML is for people; the alternate is for machines; both point at the same source of truth.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3. Query: an agent can ask, not just read<\/h3>\n\n\n\n<p><code>POST \/ask<\/code> runs natural-language search over the Knowledge Graph and returns grounded results. It is public. The real request and response:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>curl -s -X POST https:\/\/alpina.travel\/ask \\\n  -H 'Content-Type: application\/json' \\\n  -d '{\"query\":{\"text\":\"family apartment in Mariapfarr with ski access\"}}'\n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n  \"_meta\": {\n    \"selected_intent\": \"PRODUCT_SEARCH\",\n    \"selected_backend\": \"wordlift_neural_search\",\n    \"tenant_id\": \"alpina\",\n    \"processing_time_ms\": 554\n  },\n  \"results\": &#91;{\n    \"@context\": \"https:\/\/schema.org\",\n    \"@type\": \"ItemList\",\n    \"name\": \"family apartment in Mariapfarr with ski access\",\n    \"numberOfItems\": 5,\n    \"itemListElement\": &#91;\n      { \"@type\": \"ListItem\", \"position\": 1, \"item\": {\n          \"@type\": \"Product\", \"name\": \"Mariapfarr\",\n          \"description\": \"One of Austria's sunniest villages, home of the Silent Night lyrics and the Samspitze 2 base apartment.\",\n          \"@id\": \"https:\/\/data.wordlift.io\/wl01855\/mariapfarr\" }},\n      { \"@type\": \"ListItem\", \"position\": 4, \"item\": {\n          \"@type\": \"Product\", \"name\": \"Pichl\",\n          \"description\": \"Quiet locality of Mariapfarr where Samspitze 2 is located.\",\n          \"@id\": \"https:\/\/data.wordlift.io\/wl01855\/pichl\" }}\n    ]\n  }]\n}\n<\/code><\/pre>\n\n\n\n<p>Notice what comes back. The query is classified (<code>selected_intent: PRODUCT_SEARCH<\/code>), routed to WordLift neural search over the graph, and answered as a schema.org <code>ItemList<\/code> of real entities \u2014 the village, the region, the neighbouring locality where the apartment sits \u2014 each carrying its canonical <code>data.wordlift.io\/wl01855<\/code> identifier. This is not free-text guessing; it is connected evidence an agent can cite and dereference. The human planner (<code>plan.astro<\/code>) takes the same <code>@id<\/code>s and maps them back to the site&#8217;s editorial URLs, so people get clickable pages while agents get entities.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">4. Transport: an agent can connect over its own protocol<\/h3>\n\n\n\n<p>For agents that speak MCP rather than plain HTTP, the same graph is available as a tool server:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>GET https:\/\/alpina.travel\/mcp\/sse          # public MCP over Server-Sent Events\n      https:\/\/alpina.travel\/mcp\/alpina\/*    # tenant \/ protected MCP\n<\/code><\/pre>\n\n\n\n<p>Alongside these sit the commerce and open-feed routes the <code>Link<\/code> header advertises \u2014 UCP at <code>\/.well-known\/ucp<\/code>, the ACP feed at <code>\/acp\/feed<\/code>, the OKF Markdown feed at <code>\/okf\/index.md<\/code> \u2014 proxied from the commerce layer, so an agent that wants to move from <em>reading<\/em> toward <em>transacting<\/em> has a defined path. The point is not the number of protocols. It is that every one of them dereferences to the same WordLift KG.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">5. Policy: explicit, machine-readable AI-usage terms<\/h3>\n\n\n\n<p>Finally, the operator states what agents may do, in a form they can read. <code>robots.txt<\/code> (generated by <code>robots.txt.ts<\/code>) carries a <code>Content-Signal<\/code> line:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Content-Signal: search=yes, ai-input=yes, ai-train=yes\n<\/code><\/pre>\n\n\n\n<p>Indexing, use as grounding input, use for training \u2014 declared explicitly, per site, on the operator&#8217;s terms. Control is part of the offer, not an afterthought.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">And a bridge back to humans<\/h3>\n\n\n\n<p>The same query surface powers people, too. <code>\/lungau\/plan\/<\/code> now carries an <strong>&#8220;Ask Lungau anything&#8221;<\/strong> box wired to <code>\/ask<\/code>; it maps WordLift entity IDs back to internal editorial URLs, so a human gets clickable pages while an agent gets entities. And <code>\/for-agents\/<\/code> documents the whole thing \u2014 discovery, <code>\/ask<\/code>, MCP, feeds, with <code>curl<\/code> examples \u2014 a front door for any developer building against the site.<\/p>\n\n\n\n<p>The endpoint is not the product. The graph is the product. Every rung of this ladder \u2014 the <code>Link<\/code> header target, the catalog entry, the per-page alternate, the <code>\/ask<\/code> result, the MCP tool \u2014 resolves to the same canonical <code>wl01855<\/code> entities. Plural protocols, single source of truth. That is the part an Astro-SEO framing does not reach, because it starts from the page.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The Unfair Advantage: Borrow the Region&#8217;s Graph<\/h2>\n\n\n\n<p>There is a second reason this works especially well here, and it is close to unfair.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"1024\" src=\"https:\/\/wordlift.io\/blog\/en\/wp-content\/uploads\/sites\/3\/2026\/07\/ChatGPT-Image-Jul-9-2026-02_42_37-PM-1024x1024.png\" alt=\"\" class=\"wp-image-31357\" srcset=\"https:\/\/wordlift.io\/blog\/en\/wp-content\/uploads\/sites\/3\/2026\/07\/ChatGPT-Image-Jul-9-2026-02_42_37-PM-1024x1024.png 1024w, https:\/\/wordlift.io\/blog\/en\/wp-content\/uploads\/sites\/3\/2026\/07\/ChatGPT-Image-Jul-9-2026-02_42_37-PM-300x300.png 300w, https:\/\/wordlift.io\/blog\/en\/wp-content\/uploads\/sites\/3\/2026\/07\/ChatGPT-Image-Jul-9-2026-02_42_37-PM-150x150.png 150w, https:\/\/wordlift.io\/blog\/en\/wp-content\/uploads\/sites\/3\/2026\/07\/ChatGPT-Image-Jul-9-2026-02_42_37-PM-768x768.png 768w, https:\/\/wordlift.io\/blog\/en\/wp-content\/uploads\/sites\/3\/2026\/07\/ChatGPT-Image-Jul-9-2026-02_42_37-PM-1200x1200.png 1200w, https:\/\/wordlift.io\/blog\/en\/wp-content\/uploads\/sites\/3\/2026\/07\/ChatGPT-Image-Jul-9-2026-02_42_37-PM-96x96.png 96w, https:\/\/wordlift.io\/blog\/en\/wp-content\/uploads\/sites\/3\/2026\/07\/ChatGPT-Image-Jul-9-2026-02_42_37-PM.png 1254w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>A property in Salzburgerland does not have to describe its world from scratch. The region has spent years building its own semantic data layer \u2014 an authoritative, linked-data description of its places, valleys, lakes, lifts, trails, events, and towns. As a local operator, you can partner with the region and pull that linked data straight into your own site, interlinking your entities with theirs.<\/p>\n\n\n\n<p>That is the entire point of linked data: it is built to connect. When your apartment&#8217;s <code>Place<\/code> links to Salzburgerland&#8217;s canonical entity for Mariapfarr, for Lungau, for a particular ski area, you are not copying facts \u2014 you are joining an existing graph. Your small site inherits the region&#8217;s context and authority, and an agent traversing your data can walk straight out into the region&#8217;s graph, and back. You get the depth of a destination portal without maintaining one.<\/p>\n\n\n\n<p>A personal note. I have spent more than a decade working on exactly this kind of core infrastructure \u2014 the semantic, linked-data groundwork that lets regions and brands describe themselves in a way machines can actually use. So there is a particular honour, on a small family project like alpina.travel, in finally standing on the other side of it: not building the data layer this time, but becoming a consumer of it. The infrastructure I helped lay down is now the ground my own family&#8217;s alpine holiday sits on.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Why This Matters for Tourism Operators<\/h2>\n\n\n\n<p>Every tourism operator sits on hidden knowledge. A hotel knows which rooms work best for families. A destination board knows which hikes are right in spring. A ski resort knows which slopes suit beginners. An apartment owner knows which restaurants are genuinely worth recommending. A regional portal knows how places, seasons, events, and activities connect.<\/p>\n\n\n\n<p>Today most of that knowledge is trapped in pages, PDFs, galleries, booking engines, or someone&#8217;s head. Agents need something different: structured, connected, verifiable evidence. They need to know that a rental is in Pichl, that Pichl is a locality of Mariapfarr, that Mariapfarr is in Lungau, that Lungau is in Salzburgerland, that specific hikes, lakes, restaurants, and ski areas are nearby \u2014 and that the recommendation is backed by real content, media, and coordinates.<\/p>\n\n\n\n<p>That is not a keyword problem. It is a graph problem.<\/p>\n\n\n\n<p>And here is the part that matters if you run a hotel, a rental, or a destination portal in the region: you don&#8217;t rebuild your website to get this. You model your offering once, in the graph, and a thin endpoint layer speaks the standards on top of it \u2014 the same <code>Link<\/code> headers, well-known URIs, MCP, and content signals an agent already encounters everywhere else on the web. An agent can then find your world, read it without scraping, query it in natural language, and cite it with confidence \u2014 while you keep explicit control over what it&#8217;s allowed to do, and while you refuse to fake what you can&#8217;t yet prove, like live availability. A machine-readable twin of your property, sitting beside the site you already have.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">From Family Emotion to Structured Evidence<\/h2>\n\n\n\n<p>alpina.travel starts from lived experience: family holidays, snow, hikes, lakes, restaurants, morning walks, the emotional memory of a place. The hard part is translating that experience into structured data without losing its soul.<\/p>\n\n\n\n<p>A memory becomes an entity. A hike becomes a route or an attraction. A lake becomes a seasonal experience. A photo becomes evidence. A restaurant becomes a local recommendation. A destination becomes a connected node. A family story becomes something an AI agent can understand, cite, and reuse.<\/p>\n\n\n\n<p>The goal is not to make travel content colder. It is to make authentic experience legible to machines while keeping it meaningful for people.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p>Astro gives tourism operators a fast, modern, controllable frontend. Joost showed how it becomes an SEO- and agent-ready publishing stack \u2014 an important step toward the machine-readable web. WordLift adds the next layer beneath it: a persistent RDF Knowledge Graph as the single source of truth.<\/p>\n\n\n\n<p>In alpina.travel, an AI agent manages data in GitHub, that data is validated and pushed into the Knowledge Graph, and Astro renders it \u2014 to fast pages at the Cloudflare edge, and to a standards-based agent surface built on RFC 8288, RFC 9727, MCP, and A2A. For humans, it stays a simple travel website. For agents, it becomes a structured environment they can discover, read, query, and act on. For search engines, it becomes a clearer semantic graph. For the operator, it becomes reusable infrastructure across SEO, AI discovery, automation, recommendations, and booking.<\/p>\n\n\n\n<p>The website is only the visible layer. The real asset is the Knowledge Graph behind it \u2014 a semantic memory of places, experiences, media, emotions, and offers that both humans and AI agents can use.<\/p>\n\n\n\n<p>The next traveler may arrive through an agent. The question is whether the agent can understand your world.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Thank You<\/h2>\n\n\n\n<p><strong><a href=\"https:\/\/alpina.travel\" target=\"_blank\" rel=\"noreferrer noopener\">alpina.travel<\/a><\/strong> is a piece of infrastructure and a love letter in equal measure. The last word belongs to the people behind it.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>To my wife, and to my beautiful daughters, who share this love for remote alpine places. To Martin and Susanne, my dear Austrian friends, who somehow turned an Italian family into hard-core Lungauers. To Rainer, Hannah, and the entire Salzburgerland team. And to everyone who has been part of this journey:<strong> thank you<\/strong>!<\/p>\n<\/blockquote>\n\n\n\n<p>The graph holds the data. You are the reason any of it means something.<\/p>\n\n\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>How alpina.travel becomes an agentic storefront: a KG-first alpine travel site on Astro, GitHub, and WordLift, made for AI agents to discover, read and query.<\/p>\n","protected":false},"author":6,"featured_media":31364,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"wl_entities_gutenberg":"","_wlpage_enable":"","footnotes":""},"categories":[4300,4304,4285],"tags":[],"wl_entity_type":[30],"coauthors":[4226],"class_list":["post-31353","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-agentic-ai","category-ai-marketing","category-wordlift-lab","wl_entity_type-article"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v22.6 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>From Travel Website to Agentic Storefront - WordLift Blog<\/title>\n<meta name=\"description\" content=\"Your next website visitor may be an AI agent. See how alpina.travel pairs Astro with WordLift&#039;s Knowledge Graph to build a travel site agents can read and query.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/wordlift.io\/blog\/en\/from-travel-website-to-agentic-storefront\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"From Travel Website to Agentic Storefront - WordLift Blog\" \/>\n<meta property=\"og:description\" content=\"Your next website visitor may be an AI agent. See how alpina.travel pairs Astro with WordLift&#039;s Knowledge Graph to build a travel site agents can read and query.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/wordlift.io\/blog\/en\/from-travel-website-to-agentic-storefront\/\" \/>\n<meta property=\"og:site_name\" content=\"WordLift Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-07-09T16:00:02+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-07-09T16:00:48+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/wordlift.io\/blog\/en\/wp-content\/uploads\/sites\/3\/2026\/07\/alpina-travel.png\" \/>\n\t<meta property=\"og:image:width\" content=\"960\" \/>\n\t<meta property=\"og:image:height\" content=\"540\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Andrea Volpini\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andrea Volpini\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"14 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/wordlift.io\/blog\/en\/from-travel-website-to-agentic-storefront\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/wordlift.io\/blog\/en\/from-travel-website-to-agentic-storefront\/\"},\"author\":{\"name\":\"Andrea Volpini\",\"@id\":\"https:\/\/wordlift.io\/blog\/en\/#\/schema\/person\/574352082cc71dab8d164410f1cabe0a\"},\"headline\":\"From Travel Website to Agentic Storefront\",\"datePublished\":\"2026-07-09T16:00:02+00:00\",\"dateModified\":\"2026-07-09T16:00:48+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/wordlift.io\/blog\/en\/from-travel-website-to-agentic-storefront\/\"},\"wordCount\":2960,\"publisher\":{\"@id\":\"https:\/\/wordlift.io\/blog\/en\/#organization\"},\"image\":{\"@id\":\"https:\/\/wordlift.io\/blog\/en\/from-travel-website-to-agentic-storefront\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/wordlift.io\/blog\/en\/wp-content\/uploads\/sites\/3\/2026\/07\/alpina-travel.png\",\"articleSection\":[\"Agentic AI\",\"AI Marketing\",\"WordLift Lab\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/wordlift.io\/blog\/en\/from-travel-website-to-agentic-storefront\/\",\"url\":\"https:\/\/wordlift.io\/blog\/en\/from-travel-website-to-agentic-storefront\/\",\"name\":\"From Travel Website to Agentic Storefront - WordLift Blog\",\"isPartOf\":{\"@id\":\"https:\/\/wordlift.io\/blog\/en\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/wordlift.io\/blog\/en\/from-travel-website-to-agentic-storefront\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/wordlift.io\/blog\/en\/from-travel-website-to-agentic-storefront\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/wordlift.io\/blog\/en\/wp-content\/uploads\/sites\/3\/2026\/07\/alpina-travel.png\",\"datePublished\":\"2026-07-09T16:00:02+00:00\",\"dateModified\":\"2026-07-09T16:00:48+00:00\",\"description\":\"Your next website visitor may be an AI agent. See how alpina.travel pairs Astro with WordLift's Knowledge Graph to build a travel site agents can read and query.\",\"breadcrumb\":{\"@id\":\"https:\/\/wordlift.io\/blog\/en\/from-travel-website-to-agentic-storefront\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/wordlift.io\/blog\/en\/from-travel-website-to-agentic-storefront\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/wordlift.io\/blog\/en\/from-travel-website-to-agentic-storefront\/#primaryimage\",\"url\":\"https:\/\/wordlift.io\/blog\/en\/wp-content\/uploads\/sites\/3\/2026\/07\/alpina-travel.png\",\"contentUrl\":\"https:\/\/wordlift.io\/blog\/en\/wp-content\/uploads\/sites\/3\/2026\/07\/alpina-travel.png\",\"width\":960,\"height\":540,\"caption\":\"alpina.travel\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/wordlift.io\/blog\/en\/from-travel-website-to-agentic-storefront\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Blog\",\"item\":\"https:\/\/wordlift.io\/blog\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"From Travel Website to Agentic Storefront\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/wordlift.io\/blog\/en\/#website\",\"url\":\"https:\/\/wordlift.io\/blog\/en\/\",\"name\":\"WordLift Blog\",\"description\":\"AI-Powered SEO\",\"publisher\":{\"@id\":\"https:\/\/wordlift.io\/blog\/en\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/wordlift.io\/blog\/en\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/wordlift.io\/blog\/en\/#organization\",\"name\":\"WordLift\",\"url\":\"https:\/\/wordlift.io\/blog\/en\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/wordlift.io\/blog\/en\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/mk0wordliftblog7j5te.kinstacdn.com\/wp-content\/uploads\/sites\/3\/2017\/04\/logo-1.png\",\"contentUrl\":\"https:\/\/mk0wordliftblog7j5te.kinstacdn.com\/wp-content\/uploads\/sites\/3\/2017\/04\/logo-1.png\",\"width\":152,\"height\":40,\"caption\":\"WordLift\"},\"image\":{\"@id\":\"https:\/\/wordlift.io\/blog\/en\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/wordlift.io\/blog\/en\/#\/schema\/person\/574352082cc71dab8d164410f1cabe0a\",\"name\":\"Andrea Volpini\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/wordlift.io\/blog\/en\/#\/schema\/person\/image\/466a1652833e48ca11c81b363eba7c25\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/6b9d3d311b50a8749201fe4b318907a8?s=96&d=mm&r=pg\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/6b9d3d311b50a8749201fe4b318907a8?s=96&d=mm&r=pg\",\"caption\":\"Andrea Volpini\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"From Travel Website to Agentic Storefront - WordLift Blog","description":"Your next website visitor may be an AI agent. See how alpina.travel pairs Astro with WordLift's Knowledge Graph to build a travel site agents can read and query.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/wordlift.io\/blog\/en\/from-travel-website-to-agentic-storefront\/","og_locale":"en_US","og_type":"article","og_title":"From Travel Website to Agentic Storefront - WordLift Blog","og_description":"Your next website visitor may be an AI agent. See how alpina.travel pairs Astro with WordLift's Knowledge Graph to build a travel site agents can read and query.","og_url":"https:\/\/wordlift.io\/blog\/en\/from-travel-website-to-agentic-storefront\/","og_site_name":"WordLift Blog","article_published_time":"2026-07-09T16:00:02+00:00","article_modified_time":"2026-07-09T16:00:48+00:00","og_image":[{"width":960,"height":540,"url":"https:\/\/wordlift.io\/blog\/en\/wp-content\/uploads\/sites\/3\/2026\/07\/alpina-travel.png","type":"image\/png"}],"author":"Andrea Volpini","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Andrea Volpini","Est. reading time":"14 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/wordlift.io\/blog\/en\/from-travel-website-to-agentic-storefront\/#article","isPartOf":{"@id":"https:\/\/wordlift.io\/blog\/en\/from-travel-website-to-agentic-storefront\/"},"author":{"name":"Andrea Volpini","@id":"https:\/\/wordlift.io\/blog\/en\/#\/schema\/person\/574352082cc71dab8d164410f1cabe0a"},"headline":"From Travel Website to Agentic Storefront","datePublished":"2026-07-09T16:00:02+00:00","dateModified":"2026-07-09T16:00:48+00:00","mainEntityOfPage":{"@id":"https:\/\/wordlift.io\/blog\/en\/from-travel-website-to-agentic-storefront\/"},"wordCount":2960,"publisher":{"@id":"https:\/\/wordlift.io\/blog\/en\/#organization"},"image":{"@id":"https:\/\/wordlift.io\/blog\/en\/from-travel-website-to-agentic-storefront\/#primaryimage"},"thumbnailUrl":"https:\/\/wordlift.io\/blog\/en\/wp-content\/uploads\/sites\/3\/2026\/07\/alpina-travel.png","articleSection":["Agentic AI","AI Marketing","WordLift Lab"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/wordlift.io\/blog\/en\/from-travel-website-to-agentic-storefront\/","url":"https:\/\/wordlift.io\/blog\/en\/from-travel-website-to-agentic-storefront\/","name":"From Travel Website to Agentic Storefront - WordLift Blog","isPartOf":{"@id":"https:\/\/wordlift.io\/blog\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/wordlift.io\/blog\/en\/from-travel-website-to-agentic-storefront\/#primaryimage"},"image":{"@id":"https:\/\/wordlift.io\/blog\/en\/from-travel-website-to-agentic-storefront\/#primaryimage"},"thumbnailUrl":"https:\/\/wordlift.io\/blog\/en\/wp-content\/uploads\/sites\/3\/2026\/07\/alpina-travel.png","datePublished":"2026-07-09T16:00:02+00:00","dateModified":"2026-07-09T16:00:48+00:00","description":"Your next website visitor may be an AI agent. See how alpina.travel pairs Astro with WordLift's Knowledge Graph to build a travel site agents can read and query.","breadcrumb":{"@id":"https:\/\/wordlift.io\/blog\/en\/from-travel-website-to-agentic-storefront\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/wordlift.io\/blog\/en\/from-travel-website-to-agentic-storefront\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/wordlift.io\/blog\/en\/from-travel-website-to-agentic-storefront\/#primaryimage","url":"https:\/\/wordlift.io\/blog\/en\/wp-content\/uploads\/sites\/3\/2026\/07\/alpina-travel.png","contentUrl":"https:\/\/wordlift.io\/blog\/en\/wp-content\/uploads\/sites\/3\/2026\/07\/alpina-travel.png","width":960,"height":540,"caption":"alpina.travel"},{"@type":"BreadcrumbList","@id":"https:\/\/wordlift.io\/blog\/en\/from-travel-website-to-agentic-storefront\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Blog","item":"https:\/\/wordlift.io\/blog\/en\/"},{"@type":"ListItem","position":2,"name":"From Travel Website to Agentic Storefront"}]},{"@type":"WebSite","@id":"https:\/\/wordlift.io\/blog\/en\/#website","url":"https:\/\/wordlift.io\/blog\/en\/","name":"WordLift Blog","description":"AI-Powered SEO","publisher":{"@id":"https:\/\/wordlift.io\/blog\/en\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/wordlift.io\/blog\/en\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/wordlift.io\/blog\/en\/#organization","name":"WordLift","url":"https:\/\/wordlift.io\/blog\/en\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/wordlift.io\/blog\/en\/#\/schema\/logo\/image\/","url":"https:\/\/mk0wordliftblog7j5te.kinstacdn.com\/wp-content\/uploads\/sites\/3\/2017\/04\/logo-1.png","contentUrl":"https:\/\/mk0wordliftblog7j5te.kinstacdn.com\/wp-content\/uploads\/sites\/3\/2017\/04\/logo-1.png","width":152,"height":40,"caption":"WordLift"},"image":{"@id":"https:\/\/wordlift.io\/blog\/en\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/wordlift.io\/blog\/en\/#\/schema\/person\/574352082cc71dab8d164410f1cabe0a","name":"Andrea Volpini","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/wordlift.io\/blog\/en\/#\/schema\/person\/image\/466a1652833e48ca11c81b363eba7c25","url":"https:\/\/secure.gravatar.com\/avatar\/6b9d3d311b50a8749201fe4b318907a8?s=96&d=mm&r=pg","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/6b9d3d311b50a8749201fe4b318907a8?s=96&d=mm&r=pg","caption":"Andrea Volpini"}}]}},"_wl_alt_label":[],"wl:entity_url":"http:\/\/data.wordlift.io\/wl0216\/post\/from-travel-website-to-agentic-storefront-how-alpina-travel-uses-astro-github-and-an-rdf-knowledge-graph-31353","_links":{"self":[{"href":"https:\/\/wordlift.io\/blog\/en\/wp-json\/wp\/v2\/posts\/31353"}],"collection":[{"href":"https:\/\/wordlift.io\/blog\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordlift.io\/blog\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordlift.io\/blog\/en\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/wordlift.io\/blog\/en\/wp-json\/wp\/v2\/comments?post=31353"}],"version-history":[{"count":8,"href":"https:\/\/wordlift.io\/blog\/en\/wp-json\/wp\/v2\/posts\/31353\/revisions"}],"predecessor-version":[{"id":31372,"href":"https:\/\/wordlift.io\/blog\/en\/wp-json\/wp\/v2\/posts\/31353\/revisions\/31372"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordlift.io\/blog\/en\/wp-json\/wp\/v2\/media\/31364"}],"wp:attachment":[{"href":"https:\/\/wordlift.io\/blog\/en\/wp-json\/wp\/v2\/media?parent=31353"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordlift.io\/blog\/en\/wp-json\/wp\/v2\/categories?post=31353"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordlift.io\/blog\/en\/wp-json\/wp\/v2\/tags?post=31353"},{"taxonomy":"wl_entity_type","embeddable":true,"href":"https:\/\/wordlift.io\/blog\/en\/wp-json\/wp\/v2\/wl_entity_type?post=31353"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/wordlift.io\/blog\/en\/wp-json\/wp\/v2\/coauthors?post=31353"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}