From af4a10c00847142bd93203c80997c0224ee1b076 Mon Sep 17 00:00:00 2001 From: Pedro Castro Date: Fri, 19 Dec 2025 13:34:49 -0300 Subject: [PATCH] fix(seo): prevent booking confirmation pages from being indexed (#26058) Booking confirmation pages contain PII (names, emails, phone numbers) and should not be indexed by search engines - Add robots noindex to /booking/[uid]/page.tsx - Add robots noindex to /booking/[uid]/embed/page.tsx Follows same pattern as not-found.tsx --- .../booking/[uid]/embed/page.tsx | 7 +++++++ .../(booking-page-wrapper)/booking/[uid]/page.tsx | 14 +++++++++++--- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/apps/web/app/(booking-page-wrapper)/booking/[uid]/embed/page.tsx b/apps/web/app/(booking-page-wrapper)/booking/[uid]/embed/page.tsx index bf6437bd73..28ae0e5d52 100644 --- a/apps/web/app/(booking-page-wrapper)/booking/[uid]/embed/page.tsx +++ b/apps/web/app/(booking-page-wrapper)/booking/[uid]/embed/page.tsx @@ -13,6 +13,13 @@ import { type PageProps as ClientPageProps, } from "~/bookings/views/bookings-single-view.getServerSideProps"; +export const metadata = { + robots: { + index: false, + follow: false, + }, +}; + const getEmbedData = withEmbedSsrAppDir(getServerSideProps); const ServerPage = async ({ params, searchParams }: ServerPageProps) => { diff --git a/apps/web/app/(booking-page-wrapper)/booking/[uid]/page.tsx b/apps/web/app/(booking-page-wrapper)/booking/[uid]/page.tsx index 00fe058a28..534d6ab9f6 100644 --- a/apps/web/app/(booking-page-wrapper)/booking/[uid]/page.tsx +++ b/apps/web/app/(booking-page-wrapper)/booking/[uid]/page.tsx @@ -16,13 +16,15 @@ import { type PageProps as ClientPageProps, } from "~/bookings/views/bookings-single-view.getServerSideProps"; +const getData = withAppDirSsr(getServerSideProps); + export const generateMetadata = async ({ params, searchParams }: _PageProps) => { const { bookingInfo, eventType, recurringBookings, orgSlug } = await getData( buildLegacyCtx(await headers(), await cookies(), await params, await searchParams) ); const needsConfirmation = bookingInfo.status === BookingStatus.PENDING && eventType.requiresConfirmation; - return await _generateMetadata( + const metadata = await _generateMetadata( (t) => t(`booking_${needsConfirmation ? "submitted" : "confirmed"}${recurringBookings ? "_recurring" : ""}`), (t) => @@ -31,9 +33,15 @@ export const generateMetadata = async ({ params, searchParams }: _PageProps) => getOrgFullOrigin(orgSlug), `/booking/${(await params).uid}` ); -}; -const getData = withAppDirSsr(getServerSideProps); + return { + ...metadata, + robots: { + index: false, + follow: false, + }, + }; +}; const ServerPage = async ({ params, searchParams }: _PageProps) => { const context = buildLegacyCtx(await headers(), await cookies(), await params, await searchParams);