I made the design and the SEO brief for a day spa's new website in Amsterdam. The studio phi.studio built it to order, without a CMS subscription, and it has been live since the evening of 12 October 2026. What I show is technical and was checked on 29 October 2026. I say nothing about traffic or rankings, because Google Analytics is not comparable since the launch.
26
addresses in the sitemap of www.thespa.amsterdam, checked on 29 October 2026.
55
deeplinks on /massages, all with a canonical to /booking, checked on 29 October 2026.
3
old shortcuts (/book-appointment, /couple-massage, /foot-massage) that redirect with a 301 to the right page, checked on 29 October 2026.
Sources: live check with curl on www.thespa.amsterdam, 29 October 2026; Screaming Frog crawl of the test site, 8 October 2026.
The Spa Amsterdam got a new website. The old site had to be replaced without Google or guests losing their way, and without bookings dropping out of sight.
The Spa Amsterdam is a day spa in Amsterdam offering massages and body treatments. Guests book online through Treatwell.
I started from the requirements, not the screen: which addresses stay, what must be in the HTML, and which button produces which measurement. I wrote those requirements as an SEO brief for the builder. I made the design myself. After that I checked the site with a technical audit: a crawl of the test site on 8 October 2026 and a live check with curl on 29 October 2026. What the test site promised, I verify on the live site.
I wanted the code in a Git repository, SEO fields that can be edited through an API and no CMS subscription. The studio phi.studio built the site to order. Astro was their proposal. The design and the SEO brief came from me.
Every price button links to /booking with the treatment and the duration in the address, for example /booking?service=couples-massage-amsterdam&minutes=90. /massages has 55 unique deeplinks. The /booking page shows the Treatwell widget, with the chosen treatment already filled in.
The structured data is in the server-rendered HTML, not in a script that only runs in the browser. The couples page carries, among others, DaySpa, Service with Offer, FAQPage and BreadcrumbList. Every deeplink has a canonical pointing to /booking, so Google sees one booking page. All 55 deeplinks on /massages returned status 200 with that canonical on 29 October 2026.
Every booking button has a short label (data-track), for example Booking_cta_1. The site sends that label as an event straight to Google Analytics 4. Consent Mode is set to advanced, with analytics_storage denied by default. A container for Google Tag Manager is prepared but not installed: the live site does not use it.
An approved tool can use an API key to list and read pages and to update SEO fields and blocks. On 14 October 2026 I tested this by changing a page title and checking the live page.
After the crawl of the test site on 8 October 2026 I gave the builder a list of 16 points. On 29 October 2026 I checked part of it live: the three old shortcuts redirect with a 301 to the right page, the sitemap lists 26 addresses and llms.txt returns status 200 (it was 404 on the test site). Two points remain open: /blog is indexable with one post, and the decision on the duo and couples pages has not been made.
The site went live on the evening of 12 October 2026 on Vercel. In the days after, I checked indexing, canonicals, the sitemap and redirects.
The result is technical and verifiable. These are not traffic or ranking figures.
| Measurement | Before | After | Source |
|---|---|---|---|
| Addresses of existing pages | Old addresses | Same addresses, no redirects needed | Screaming Frog crawl, 8 October 2026; curl, 29 October 2026 |
| /booking page | 301 to Treatwell | Own page with Treatwell widget, status 200, canonical to /booking | Screaming Frog, 1 October 2026; curl, 29 October 2026 |
| Deeplinks on /massages | Not compared | 55 unique, all status 200 with canonical to /booking | curl, 29 October 2026 |
| Old shortcuts | Not compared | 3 of 3 redirect with a 301 to the right page | curl, 29 October 2026 |
| Sitemap | Not compared | 26 addresses | curl, 29 October 2026 |
| Structured data in the HTML | Not compared | DaySpa, Service with Offer, FAQPage and BreadcrumbList on the couples page | curl, 29 October 2026 |
| llms.txt | 404 (test site) | Status 200 | Launch issue list, 8 October 2026; curl, 29 October 2026 |
| Consent Mode | Not compared | Advanced, analytics_storage denied by default | Analytics script on the live site, 29 October 2026 |
Besides the build, I set up measurement in Google Analytics 4 so you can see which pages guests pass on their way to the booking page. With every view I explain what it does and does not say. Below is the Path exploration ‘Spa pad vooruit’, Organic tab: the route from the first page view to the pages after it.

Status on 29 October 2026:
No migration can promise rankings. I can protect what Google reads. Existing pages keep the same address, every page has a canonical pointing to itself, the structured data is in the HTML and the sitemap lists 26 addresses. Three old shortcuts redirect with a 301 to the right page. I make no statement in this case about rankings after the launch.
Structured data is code that tells Google what a page is. On 29 October 2026 the HTML of the couples page carries, among others, DaySpa, Service with Offer, FAQPage and BreadcrumbList. It is in the page itself, so Google and AI assistants can read it without running scripts.
Booking runs through Treatwell. The /booking page shows the Treatwell widget, so guests book without leaving thespa.amsterdam. The deeplink from the button preselects the treatment.
A direct link hides what happens before the booking. On the booking page I see how many guests start a booking. What happens inside Treatwell, I do not see in Analytics.
Every booking button has a short label (data-track), for example Booking_cta_1. The site sends that label as an event straight to Google Analytics 4. A container for Google Tag Manager is prepared but not installed.
Yes, through an MCP connector. An approved tool can use an API key to list and read pages and to update SEO fields and blocks. On 14 October 2026 I tested this by changing a page title and checking the live page.
A deeplink is a link that opens a page with the choice already filled in. Every price button on /massages links to /booking with the treatment and the duration in the address. All 55 deeplinks on /massages have a canonical pointing to /booking, checked on 29 October 2026, so Google sees one booking page.
I wanted the code in a Git repository, SEO fields that can be edited through an API and no CMS subscription. The studio phi.studio built the site with Astro, their proposal. I wrote the design and the SEO brief myself.
The site asks for consent before Google Analytics counts a visit, with analytics_storage denied by default. Visitors who decline or ignore the banner are not counted. Analytics then shows fewer sessions even when no fewer people visit, so I do not use the figures from after 12 October 2026 as a result.
hello@sahardid.comAmsterdam