diff --git a/packages/astro/src/astro-components/control/Protect.astro b/packages/astro/src/astro-components/control/Protect.astro
index 33e87bb2bd..1868132bd3 100644
--- a/packages/astro/src/astro-components/control/Protect.astro
+++ b/packages/astro/src/astro-components/control/Protect.astro
@@ -27,10 +27,18 @@ type Props = ProtectProps & {
const { isStatic, ...props } = Astro.props;
const ProtectComponent = isStaticOutput(isStatic) ? ProtectCSR : ProtectSSR;
+
+// Note: Astro server islands also use a "fallback" slot for loading states
+// See: https://docs.astro.build/en/guides/server-islands/#server-island-fallback-content
+// We use "protect-fallback" as our preferred slot name to avoid conflicts
+const hasProtectFallback = Astro.slots.has('protect-fallback');
---
-
-
+ {hasProtectFallback ? (
+
+ ) : (
+
+ )}
diff --git a/packages/astro/src/astro-components/control/ProtectSSR.astro b/packages/astro/src/astro-components/control/ProtectSSR.astro
index 236e0b9f02..4a1199d207 100644
--- a/packages/astro/src/astro-components/control/ProtectSSR.astro
+++ b/packages/astro/src/astro-components/control/ProtectSSR.astro
@@ -9,13 +9,18 @@ const isUnauthorized =
(typeof Astro.props.condition === "function" &&
!Astro.props.condition(has)) ||
((Astro.props.role || Astro.props.permission) && !has(Astro.props));
-
-// Note: Astro server islands also use a "fallback" slot for loading states
-// See: https://docs.astro.build/en/guides/server-islands/#server-island-fallback-content
-// We use "protect-fallback" as our preferred slot name to avoid conflicts
-const fallbackSlot = Astro.slots.has('protect-fallback')
- ? 'protect-fallback'
- : 'fallback';
+
+const hasProtectFallback = Astro.slots.has('protect-fallback');
---
-{isUnauthorized ? : }
+{
+ isUnauthorized ? (
+ hasProtectFallback ? (
+
+ ) : (
+
+ )
+ ) : (
+
+ )
+}