From d565cae157486136b6ad8bc134bc3747260efc81 Mon Sep 17 00:00:00 2001 From: Levi Zitting Date: Sun, 9 Aug 2026 18:26:02 -0500 Subject: [PATCH] feat: control search indexing at runtime --- .env.example | 1 + src/app/layout.tsx | 5 ++++- src/app/robots.ts | 13 +++++++++++++ src/serverConfig.ts | 4 ++++ 4 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 src/app/robots.ts diff --git a/.env.example b/.env.example index 2838945..0fbb332 100644 --- a/.env.example +++ b/.env.example @@ -4,3 +4,4 @@ APP_PORT=3000 UMBRACO_BASE_URL=http://localhost:7158 CMS_PUBLIC_URL=http://localhost:7158 SITE_URL=http://localhost:3000/ +SEARCH_INDEXING_ENABLED=true diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 9f8a5c1..de5b8da 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -7,7 +7,7 @@ import { config } from '@fortawesome/fontawesome-svg-core'; import '@fortawesome/fontawesome-svg-core/styles.css'; import './globals.css'; import { Footer } from '@/components/Footer'; -import { getSiteUrl } from '@/serverConfig'; +import { getSiteUrl, isSearchIndexingEnabled } from '@/serverConfig'; config.autoAddCss = false; @@ -22,6 +22,9 @@ export async function generateMetadata(): Promise { default: 'Method Conference - October 12th 2024 - Springfield, MO', }, metadataBase: getSiteUrl(), + robots: isSearchIndexingEnabled() + ? undefined + : { index: false, follow: false }, }; } diff --git a/src/app/robots.ts b/src/app/robots.ts new file mode 100644 index 0000000..e2d06f9 --- /dev/null +++ b/src/app/robots.ts @@ -0,0 +1,13 @@ +import type { MetadataRoute } from 'next'; +import { connection } from 'next/server'; +import { isSearchIndexingEnabled } from '@/serverConfig'; + +export default async function robots(): Promise { + await connection(); + + return { + rules: isSearchIndexingEnabled() + ? { userAgent: '*', allow: '/' } + : { userAgent: '*', disallow: '/' }, + }; +} diff --git a/src/serverConfig.ts b/src/serverConfig.ts index 4659e05..6eb442e 100644 --- a/src/serverConfig.ts +++ b/src/serverConfig.ts @@ -23,6 +23,10 @@ export function getSiteUrl(): URL { return getRequiredUrl('SITE_URL'); } +export function isSearchIndexingEnabled(): boolean { + return process.env.SEARCH_INDEXING_ENABLED === 'true'; +} + export function getNewsletterConfig(): { endpoint?: URL; listId?: string;