diff --git a/src/routes/+layout.server.ts b/src/routes/+layout.server.ts index b779e2a..465053f 100644 --- a/src/routes/+layout.server.ts +++ b/src/routes/+layout.server.ts @@ -48,9 +48,33 @@ function getSlugFromEntry(entry: NavLinkEntry): string { return e.slug ?? e._slug ?? ''; } -export const load: LayoutServerLoad = async ({ locals }) => { +export const load: LayoutServerLoad = async ({ locals, route }) => { const translations = locals.translations ?? {}; + // Embed-Routen ((embed)/...) brauchen kein Site-Chrome. Bootstrap-Batch + // wird übersprungen — spart 1 CMS-Roundtrip + Logo-Transform pro Request. + // Layout-Komponente rendert über `isEmbed` ohne Header/Footer/Banner. + if ((route.id ?? '').startsWith('/(embed)')) { + const siteName = + (import.meta.env.PUBLIC_SITE_NAME as string | undefined) || SITE_NAME; + const siteBaseUrl = (env.PUBLIC_SITE_URL || '').replace(/\/$/, ''); + return { + headerLinks: [] as NavLink[], + socialLinks: [] as SocialLink[], + footerData: null as FooterEntry | null, + logoUrl: null as string | null, + logoSvgHtml: null as string | null, + logoSocialImage: null as string | null, + siteName, + siteBaseUrl, + translations, + pageConfig: null as PageConfigEntry | null, + seoTitleTemplate: null, + seoDescriptionTemplate: null, + analyticsPm86SiteId: null, + }; + } + // Layout-Bootstrap: Navigation (header + social), Footer, page_config in // einem einzigen HTTP-Roundtrip (POST /api/content/_batch). Reduziert von // 4 sequentiellen Calls auf 1. Page-/Post-Stubs gehen separat (sparse diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index 66b30fd..09c4b8d 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -16,6 +16,14 @@ let { data, children }: { data: LayoutData; children: import('svelte').Snippet } = $props(); + /** + * Embed-Routen (z.B. /widget/...) liegen in der `(embed)`-Route-Group und + * sollen ohne Site-Chrome (Header, Footer, TopBanner, Breadcrumbs, Skip-Link, + * Preview-Banner) gerendert werden — auch SEO-Tags ausser noindex sind irrelevant, + * weil das Widget per `