diff --git a/errors/cant-override-next-props.md b/errors/cant-override-next-props.md
new file mode 100644
index 0000000000000..ea3e5213c18e7
--- /dev/null
+++ b/errors/cant-override-next-props.md
@@ -0,0 +1,13 @@
+# Can't Override Next Props
+
+#### Why This Error Occurred
+
+In your `pages/_app.js` you returned an object from `getInitialProps` that contained a `router` or `Component` value. These property names are used by Next.js and can not be overwritten.
+
+#### Possible Ways to Fix It
+
+Look in your _app.js component's `getInitialProps` function and make sure neither of these property names are present in the object returned.
+
+### Useful Links
+
+- [The issue this was reported in: #6480](https://github.com/zeit/next.js/issues/6480)
diff --git a/packages/next-server/server/render.tsx b/packages/next-server/server/render.tsx
index caee0e41f307b..aa2ecd0d1adfb 100644
--- a/packages/next-server/server/render.tsx
+++ b/packages/next-server/server/render.tsx
@@ -212,6 +212,10 @@ export async function renderToHTML(
return render(renderElementToString,
Hello there 👋
+) diff --git a/test/integration/no-override-next-props/test/index.test.js b/test/integration/no-override-next-props/test/index.test.js new file mode 100644 index 0000000000000..4e5d8c26469f4 --- /dev/null +++ b/test/integration/no-override-next-props/test/index.test.js @@ -0,0 +1,27 @@ +/* eslint-env jest */ +/* global jasmine */ +import { join } from 'path' +import { + renderViaHTTP, + launchApp, + findPort, + killApp +} from 'next-test-utils' + +jasmine.DEFAULT_TIMEOUT_INTERVAL = 1000 * 30 + +let server +let appPort + +describe('Dynamic require', () => { + beforeAll(async () => { + appPort = await findPort() + server = await launchApp(join(__dirname, '../'), appPort) + }) + afterAll(() => killApp(server)) + + it('should show error when a Next prop is returned in _app.getInitialProps', async () => { + const html = await renderViaHTTP(appPort, '/') + expect(html).toMatch(/https:\/\/err\.sh\/zeit\/next\.js\/cant-override-next-props\.md/) + }) +})