The target
A patient taps Book on the sciatica page at 9pm, sees live slots for a physiotherapy assessment, picks Thursday 10am with Sam, enters name, mobile and email, and gets an SMS confirmation. At 8am the appointment is in the practice system's diary against Sam, as a new-patient assessment, with the patient record created. Reception did nothing. That is embedded booking done properly. Here is the setup, for the three systems most clinics run.
Step 1: configure the system first
Nothing on the website helps if the booking system shows no availability. In Cliniko, Jane or Nookal:
- Appointment types exposed online: initial assessments per discipline, follow-ups, massage durations, classes. Not everything.
- Practitioners bookable online, and which of their hours are exposed. Many clinics open most of the diary; some hold slots for phone bookings and follow-ups.
- Locations, if more than one.
- New patient registration in the flow with minimum fields; intake forms sent afterwards.
- Deposits or card capture, if used, via the system's payment integration.
- Confirmation and reminders in the clinic's voice with the practical details.
- Minimum notice and maximum advance.
Book a test appointment as a patient on a phone before touching the website.
Step 2: choose link or embed
Cliniko offers a hosted booking page at your Cliniko subdomain and an embed snippet (an iframe) that can pre-select location, practitioner and appointment type via URL parameters. The embed is light and behaves well on phones. Either works; the embed on a dedicated page is a good default.
Jane prefers sending patients to your Jane-hosted booking page, which is polished and mobile-friendly, with deep links per discipline and practitioner. A "Book Online" button embed is provided. Link rather than iframe; Jane's page is the product.
Nookal offers an embeddable widget with configurable styling and pre-selection parameters, plus a hosted page. The widget embeds well; use it on a dedicated page.
Whichever: the booking system loads only when the patient wants to book, never on every page. A Book button that links to /book or to the hosted page costs the site nothing.
Step 3: the dedicated booking page
/book on your own domain. It holds the embed (or a branded hand-off to the hosted page), a one-line reassurance ("Choose a service and practitioner, pick a time, done. New patients welcome."), the phone number and a callback form for those who will not self-book, and nothing else. The URL goes on Google Business Profile, Instagram, voicemail and printed cards.
Keep it fast: reserve the iframe's height so nothing shifts; preconnect to the system's domain; no other scripts on the page.
Step 4: deep links from every page
Every Book button carries the most specific pre-selection the page allows, via the system's URL parameters:
| Page | Pre-selects | |---|---| | Home | New patient assessment, or nothing | | Service page (e.g. sports massage) | That appointment type | | Condition page (e.g. sciatica) | The usual appointment type for it | | Practitioner profile | That practitioner and their initial appointment | | Location page | That location | | Class page | That class |
Consult each system's current documentation for the parameter names; all three support practitioner and appointment type, and Cliniko and Nookal support location.
Step 5: the surrounding pieces
- Header Book button on every page, visible on a phone without scrolling, linking to
/bookor the hosted page. - Google Business Profile booking link to
/book. - Voicemail mentioning online booking.
- Intake forms from the system, sent on booking, so health information never passes through the website.
- Patient self-service for rescheduling and cancelling, turned on, mentioned in reminders.
- Tracking:
booking_clickon every Book button with page and service parameters; completed bookings by source from the system's reports; a return URL to a thank-you page if the system supports it.
Step 6: test in the browsers patients use
Safari and Chrome on a phone, and Instagram's and Facebook's in-app browsers, where a large share of clinic patients arrive from. Complete a booking in each. If an iframe embed fails in an in-app browser (third-party cookie handling varies), link to the hosted page from those contexts or entirely. Then check the diary and the confirmation.
Monthly
Repeat the test from the home page, a service page and a practitioner profile. The systems update their portals; find out before a patient does.
What goes wrong
- Too little exposed: patients see no availability and leave.
- Everything exposed with no pre-selection: patients cannot choose and leave.
- Widget on every page: the site slows and the widget is rarely used.
- Health questions in the booking form: abandonment and a privacy problem.
- Nobody reviews online bookings in the morning: the patient arrives unexpected.
Where this sits
Wiring Cliniko, Jane or Nookal into the site with a dedicated page, deep links and tracking is the core of how we build clinic websites. The system is the clinic's choice; making it one tap from every page with the right practitioner already chosen is the website's job.