From 544faf6ad4fb766b7bdab71e9769e28afb51a9f2 Mon Sep 17 00:00:00 2001 From: Archer Date: Thu, 26 Feb 2026 23:51:51 +0800 Subject: [PATCH] feat(docs): add analytics tracking script support (#6473) * feat(docs): add analytics tracking script support - Add tracking script injection in document layout - Support separate site IDs for CN and IO domains - Add build-time environment variables for tracking config - Requires GitHub secrets: DOC_TRACK_SRC, DOC_TRACK_CN, DOC_TRACK_IO * fix(docs): simplify tracking to single site ID per build --------- Co-authored-by: archer --- .github/workflows/docs-deploy.yml | 4 ++++ document/Dockerfile | 4 ++++ document/app/[lang]/layout.tsx | 13 +++++++++++++ 3 files changed, 21 insertions(+) diff --git a/.github/workflows/docs-deploy.yml b/.github/workflows/docs-deploy.yml index 512ee5f79d..95faa61979 100644 --- a/.github/workflows/docs-deploy.yml +++ b/.github/workflows/docs-deploy.yml @@ -121,6 +121,8 @@ jobs: platforms: linux/amd64 build-args: | FASTGPT_HOME_DOMAIN=${{ matrix.domain_config.domain }} + DOC_TRACK_SRC=${{ secrets.DOC_TRACK_SRC }} + DOC_TRACK_SITE_ID=${{ secrets.DOC_TRACK_CN }} - name: Build and push Docker images (IO) if: matrix.domain_config.suffix == 'io' @@ -134,6 +136,8 @@ jobs: platforms: linux/amd64 build-args: | FASTGPT_HOME_DOMAIN=${{ matrix.domain_config.domain }} + DOC_TRACK_SRC=${{ secrets.DOC_TRACK_SRC }} + DOC_TRACK_SITE_ID=${{ secrets.DOC_TRACK_IO }} update-images: needs: [generate-timestamp, build-images] diff --git a/document/Dockerfile b/document/Dockerfile index 7c88d341ca..5eff866c59 100644 --- a/document/Dockerfile +++ b/document/Dockerfile @@ -20,8 +20,12 @@ RUN apk add --no-cache \ WORKDIR /app ARG FASTGPT_HOME_DOMAIN +ARG DOC_TRACK_SRC +ARG DOC_TRACK_SITE_ID ENV FASTGPT_HOME_DOMAIN=$FASTGPT_HOME_DOMAIN +ENV NEXT_PUBLIC_DOC_TRACK_SRC=$DOC_TRACK_SRC +ENV NEXT_PUBLIC_DOC_TRACK_SITE_ID=$DOC_TRACK_SITE_ID COPY . . RUN npm install diff --git a/document/app/[lang]/layout.tsx b/document/app/[lang]/layout.tsx index 427fcb4b85..8078873b33 100644 --- a/document/app/[lang]/layout.tsx +++ b/document/app/[lang]/layout.tsx @@ -4,6 +4,7 @@ import { Inter } from 'next/font/google'; import type { ReactNode } from 'react'; import type { Translations } from 'fumadocs-ui/i18n'; import CustomSearchDialog from '@/components/CustomSearchDialog'; +import Script from 'next/script'; const inter = Inter({ subsets: ['latin'] @@ -41,9 +42,21 @@ export default async function Layout({ }) { const { lang } = await params; + // Get tracking config from env (site ID is injected per-build by CI) + const trackSrc = process.env.NEXT_PUBLIC_DOC_TRACK_SRC; + const siteId = process.env.NEXT_PUBLIC_DOC_TRACK_SITE_ID; + return ( + {trackSrc && siteId && ( +