diff --git a/.changeset/rude-monkeys-pay.md b/.changeset/rude-monkeys-pay.md
new file mode 100644
index 00000000000..a9e0c7473f0
--- /dev/null
+++ b/.changeset/rude-monkeys-pay.md
@@ -0,0 +1,5 @@
+---
+'@apollo/server': patch
+---
+
+Add missing `nonce` on `script` tag for non-embedded landing page
diff --git a/packages/server/src/__tests__/plugin/landingPage/plugin.test.ts b/packages/server/src/__tests__/plugin/landingPage/plugin.test.ts
index f38fa91ea01..5ce3e434d57 100644
--- a/packages/server/src/__tests__/plugin/landingPage/plugin.test.ts
+++ b/packages/server/src/__tests__/plugin/landingPage/plugin.test.ts
@@ -1,5 +1,8 @@
import { ApolloServer, HeaderMap } from '@apollo/server';
-import { ApolloServerPluginLandingPageLocalDefault } from '@apollo/server/plugin/landingPage/default';
+import {
+ ApolloServerPluginLandingPageLocalDefault,
+ ApolloServerPluginLandingPageProductionDefault,
+} from '@apollo/server/plugin/landingPage/default';
import { describe, expect, test } from '@jest/globals';
import assert from 'assert';
import { mockLogger } from '../../mockLogger';
@@ -61,4 +64,16 @@ describe('ApolloServerPluginLandingPageDefault', () => {
);
await server.stop();
});
+
+ test(`nonce exists in non-embedded landing page`, async () => {
+ const plugin = ApolloServerPluginLandingPageProductionDefault({
+ embed: false,
+ });
+
+ // @ts-ignore not passing things to `serverWillStart`
+ const { renderLandingPage } = await plugin.serverWillStart?.({});
+ const landingPageHtml = await (await renderLandingPage?.()).html();
+
+ expect(landingPageHtml).toMatch(/
+
`;