Skip to content
All cases

The Spa Amsterdam: a new website, custom built.

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.

Client

The Spa Amsterdam

Sector

Day spa offering massages and body treatments, Amsterdam

My role

Design, SEO brief and tracking

Period

From 29 September 2026

Services

Technical SEO, Local SEO, Conversion Optimization

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 challenge

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.

  • Booking runs through Treatwell. Analytics therefore sees no revenue.
  • The old /booking page was a 301 to Treatwell (Screaming Frog crawl of 1 October 2026). What guests did before booking could not be measured.
  • Existing addresses and links had to keep working.

About the client

The Spa Amsterdam is a day spa in Amsterdam offering massages and body treatments. Guests book online through Treatwell.

My approach

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.

What I built

The brief and the choice of a custom build

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.

Deeplinks and booking page (live since 12 October 2026)

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.

Structured data and canonical

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.

Tracking and consent

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.

MCP connector (tested on 14 October 2026)

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.

Migration checklist (8 October 2026)

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.

Launch (12 October 2026)

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

The result is technical and verifiable. These are not traffic or ranking figures.

MeasurementBeforeAfterSource
Addresses of existing pagesOld addressesSame addresses, no redirects neededScreaming Frog crawl, 8 October 2026; curl, 29 October 2026
/booking page301 to TreatwellOwn page with Treatwell widget, status 200, canonical to /bookingScreaming Frog, 1 October 2026; curl, 29 October 2026
Deeplinks on /massagesNot compared55 unique, all status 200 with canonical to /bookingcurl, 29 October 2026
Old shortcutsNot compared3 of 3 redirect with a 301 to the right pagecurl, 29 October 2026
SitemapNot compared26 addressescurl, 29 October 2026
Structured data in the HTMLNot comparedDaySpa, Service with Offer, FAQPage and BreadcrumbList on the couples pagecurl, 29 October 2026
llms.txt404 (test site)Status 200Launch issue list, 8 October 2026; curl, 29 October 2026
Consent ModeNot comparedAdvanced, analytics_storage denied by defaultAnalytics script on the live site, 29 October 2026

Extra: what you get when you work with me

GA4 Path exploration for The Spa Amsterdam

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.

GA4 Path exploration Spa pad vooruit, Organic tab: paths from the first page view to the pages after it, 13 through 22 October 2026
GA4 Path exploration ‘Spa pad vooruit’, Organic tab, 13 through 22 October 2026. I left out the counts, and the tab name is in Dutch. Since the launch GA4 only counts visitors who accept analytics: this shows the shape of the paths, not a volume and not a result.

What the figures cannot prove

  • Google Analytics is not comparable since 12 October 2026. The new site only counts visitors who accept analytics. Sessions from before and after the launch are therefore not a comparison, and I do not use them as a result.
  • Vouchers cannot be measured in GA4. There is no purchase event and no separate voucher host. I can say nothing about voucher sales.
  • Treatwell bookings are not in GA4. A booking that ends in Treatwell is not visible in Analytics.
  • I make no statement about rankings. The checks above show what Google can read, not how the site ranks.
  • These are snapshots. The figures were checked on 29 October 2026. The site can change after that.

What next

Status on 29 October 2026:

  • The /blog page is indexable and has one post.
  • The decision on the duo and couples pages is open.
  • Voucher sales have no measurement yet.

More questions about the build

Will a new website cost you your rankings?

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.

What is structured data and what is on the site?

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.

How does booking work?

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.

Why a booking page and not a direct link to Treatwell?

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.

How do you track what the buttons do?

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.

Can AI tools update the website?

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.

Further reading

Frequently asked questions

What is a deeplink and why do The Spa's booking buttons use them?

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.

Why a custom build instead of WordPress or Webflow?

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.

Why do the Analytics numbers look lower after the launch?

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.

Want to know what is possible for your site? Ask me.

hello@sahardid.comAmsterdam