This post is for the clinic owner, practice manager or web developer who has added an online booking tool to a doctor's website and wants to know what Google sees when it visits the page. It looks at the common ways scheduling tools are embedded, what each one does to indexing and tracking, and a pattern that keeps booking working without damaging the pages that rank.
Scheduling vendors typically hand you a snippet: an iframe, a script tag that injects a widget, or a link to a page hosted on their domain. All three work for patients. They differ sharply in what a crawler can read, which URL gets credit, and what shows up in search results under your doctor's name.
The aim is not to hide booking from search. It is to make sure the pages that bring patients to the booking step are complete on their own, and that the booking step itself does not leak into the index in ways that confuse the picture.
How Google processes a page with an embed
Google fetches the HTML and then renders the page in a headless browser, as described in its JavaScript SEO basics. Content added by scripts can be indexed if rendering succeeds and nothing blocks the resources. Three conditions decide what happens to an embed:
- Can Google fetch the embed's resources? If the vendor's domain disallows crawling in its robots.txt, or the script is blocked, the widget may not render for Googlebot at all. Google explains how robots.txt rules apply to each host separately.
- Where does the content live? Content inside an iframe belongs to the iframe's own URL, not to your page. The surrounding page is treated as a page that contains a frame.
- Is the content stable? Slot lists that change by the hour produce a different page every time they are crawled, which adds noise and little value.
You can test all three yourself in Search Console's URL Inspection tool. Run a live test, open the rendered HTML and the screenshot, and read the list of page resources it could not load. Google describes the tool in its URL Inspection documentation.
Teardown: the four common embed types
1. Iframe embed
The vendor gives you a snippet that loads their booking page inside an iframe on your doctor page.
- What Google sees on your page: an empty frame. Any text inside the frame is attributed to the frame's URL.
- What can leak: the frame's own URL, which sits on the vendor's domain, may be crawlable and indexable. If the vendor publishes a public booking page for each clinic, that page can rank for your doctor's name, with the vendor's branding and not yours.
- Canonical risk: if the vendor's page includes a canonical tag to itself, nothing consolidates to you. That is correct behaviour, but it means you gain no benefit from the content.
- Tracking: analytics events inside the frame do not reach your property unless you pass messages out of the frame or configure cross-domain measurement.
- Mobile: frames with fixed heights often break on small screens, which hurts usability more than SEO.
2. JavaScript widget that renders into your page
A script tag loads from the vendor and builds the booking interface in your DOM.
- What Google sees: your page, plus the widget's markup if the script runs in Googlebot's renderer and the vendor does not block it.
- Risks: slot lists, availability messages and "no appointments available" strings can end up in your rendered HTML. If those strings change daily, the page's rendered text changes. A "no slots available" message on a service page can become the snippet text.
- Performance: third-party scripts can delay rendering. Your Core Web Vitals can degrade without anything being wrong in your own code.
- Tracking: easier, because the code runs within your page and can fire events with your own tag manager.
3. Link out to a vendor-hosted booking page
The "Book now" button simply goes to a page on the vendor's domain.
- What Google sees: a normal outbound link.
- What can leak: nothing from your page. But the vendor's page for your doctor may be indexed and appear alongside or above your own page for name searches.
- Brand effect: the patient leaves your domain. This is acceptable for conversion if the vendor's experience is good, and awkward for analytics and for patient trust if the domain is unfamiliar.
4. Marketplace profile with a booking button
A doctor's profile on a third-party marketplace includes a booking tool. This is not an embed, but it competes with your page. Do not treat it as a substitute for your own page, and do not copy its text onto your site.
The safe pattern for appointment forms
The pattern that works for most clinics and hospitals has four parts.
- The doctor or service page is complete without the widget. It has the doctor's name, qualifications, specialties, languages, location, consultation hours and a plain-text description of how to book, all in HTML that Google can read. If the widget fails, the page is still useful.
- The booking button is a real link. Use an anchor with a real href that points to a booking page on your own domain, for example
/book/?doctor=dr-name. A crawler can follow it, and a user without JavaScript can use it. - The booking page is on your domain and carries a robots meta tag with noindex. The page needs to be fetchable for Google to see the tag, so do not also block it in robots.txt. Google explains this interplay in its guidance on blocking indexing. The booking page can hold the iframe or widget. The vendor page inside it is no longer your ranking page.
- Confirmation and thank-you pages are noindex as well, and fire your conversion event.
Add the booking step to your sitemap only if you want it indexed. For most sites you do not.
Where the tool allows it, ask the vendor to set noindex on the public booking pages it hosts for your clinic, or to disable public profile pages. If the vendor will not, accept that those pages may exist and make sure your own pages are stronger. A well-built page that matches the name search should outrank a thin vendor page.
Canonical signals and duplicate pages
Booking tools sometimes create URLs for each doctor, location or date. If those URLs render the same shell with different parameters, they can multiply. Check two things.
- Self-referencing canonicals on your doctor pages, so the doctor page is the canonical version of itself, as explained in Google's canonicalization documentation.
- Parameter handling. If booking parameters change the page content but not the substance, prevent crawling of those combinations through robots.txt patterns or noindex on the parameterised pages. A site crawl will list the parameter URLs quickly, and a technical SEO audit covers them.
Avoid putting patient-identifying details in URLs. Query strings containing names, phone numbers or reasons for visit can end up in analytics, server logs and referrer headers. Use a session or token and keep personal data in the form body.




