diff --git a/README.md b/README.md
index 7109ff8e..2bb52863 100644
--- a/README.md
+++ b/README.md
@@ -194,6 +194,12 @@ Application behavior can be changed by configuring the following environment var
- `NEXT_PUBLIC_SITE_FEEDS = 1` enables feeds at `/feed.json` and `/rss.xml`
- `NEXT_PUBLIC_OG_TEXT_ALIGNMENT = BOTTOM` keeps OG image text bottom aligned (default is top)
+#### Scripts & Analytics
+- `PAGE_SCRIPT_URLS`
+ - comma-separated list of URLs to be added to the bottom of the body tag via "next/script"
+ - urls must begin with 'https'
+ - ⚠️ this will invoke arbitrary script execution on every page—use with caution
+
## Alternate storage providers
Only one storage adapter—Vercel Blob, Cloudflare R2, AWS S3, or MinIO—can be used at a time. Ideally, this is configured before photos are uploaded (see [Issue #34](https://github.com/sambecker/exif-photo-blog/issues/34) for migration considerations). If you have multiple adapters, you can set one as preferred by storing `aws-s3`, `cloudflare-r2`, `minio`, or `vercel-blob` in `NEXT_PUBLIC_STORAGE_PREFERENCE`. See [FAQ](#will-there-be-support-for-image-storage-providers-beyond-vercel-aws-and-cloudflare) regarding unsupported providers.
diff --git a/app/layout.tsx b/app/layout.tsx
index 47a84e60..009f76f4 100644
--- a/app/layout.tsx
+++ b/app/layout.tsx
@@ -10,6 +10,7 @@ import {
HTML_LANG,
SITE_FEEDS_ENABLED,
ADMIN_DEBUG_TOOLS_ENABLED,
+ PAGE_SCRIPT_URLS,
} from '@/app/config';
import AppStateProvider from '@/app/AppStateProvider';
import ToasterWithThemes from '@/toast/ToasterWithThemes';
@@ -30,6 +31,7 @@ import SharedHoverProvider from '@/components/shared-hover/SharedHoverProvider';
import { PATH_FEED_JSON, PATH_RSS_XML } from '@/app/path';
import SelectPhotosProvider from '@/admin/select/SelectPhotosProvider';
import AdminBatchEditPanel from '@/admin/select/AdminBatchEditPanel';
+import Script from 'next/script';
import '../tailwind.css';
@@ -137,13 +139,14 @@ export default function RootLayout({
-
+
+ {PAGE_SCRIPT_URLS.map(url => )}