diff --git a/docs/routing/dynamic-routes.md b/docs/routing/dynamic-routes.md
index 483de9d1732fc..0be3069dacd12 100644
--- a/docs/routing/dynamic-routes.md
+++ b/docs/routing/dynamic-routes.md
@@ -58,6 +58,13 @@ Client-side navigations to a dynamic route can be handled with [`next/link`](/do
### Catch all routes
+
+ Examples
+
+
+
Dynamic routes can be extended to catch all paths by adding three dots (`...`) inside the brackets. For example:
- `pages/post/[...slug].js` matches `/post/a`, but also `post/a/b`, `post/a/b/c` and so on.
diff --git a/examples/catch-all-routes/README.md b/examples/catch-all-routes/README.md
new file mode 100644
index 0000000000000..b26d655e71dd2
--- /dev/null
+++ b/examples/catch-all-routes/README.md
@@ -0,0 +1,55 @@
+# Catch All Routes Example
+
+This example shows how to use [Catch all routes](https://nextjs.org/docs/routing/dynamic-routes#catch-all-routes) in Next.js, which allows a dynamic route to catch all paths.
+
+The catch all page is in `pages/post/[...slug]`, it matches any path after `/post`, like the following:
+
+- `/post/first-post`,
+- `/post/2020/first-post`
+- `/post/2020/first-post/with/catch/all/routes`
+- Anything that matches the glob `/post/**`
+
+You can use `next/link` as displayed in this example to route to these pages client side.
+
+## Deploy your own
+
+Deploy the example using [ZEIT Now](https://zeit.co/now):
+
+[![Deploy with ZEIT Now](https://zeit.co/button)](https://zeit.co/new/project?template=https://github.com/zeit/next.js/tree/canary/examples/catch-all-routes)
+
+## How to use
+
+### Using `create-next-app`
+
+Execute [`create-next-app`](https://github.com/zeit/next.js/tree/canary/packages/create-next-app) with [npm](https://docs.npmjs.com/cli/init) or [Yarn](https://yarnpkg.com/lang/en/docs/cli/create/) to bootstrap the example:
+
+```bash
+npm init next-app --example catch-all-routes catch-all-routes-app
+# or
+yarn create next-app --example catch-all-routes catch-all-routes-app
+```
+
+### Download manually
+
+Download the example:
+
+```bash
+curl https://codeload.github.com/zeit/next.js/tar.gz/canary | tar -xz --strip=2 next.js-canary/examples/catch-all-routes
+cd catch-all-routes
+```
+
+Install it and run:
+
+```bash
+npm install
+npm run dev
+# or
+yarn
+yarn dev
+```
+
+Deploy it to the cloud with [Now](https://zeit.co/now) ([download](https://zeit.co/download)):
+
+```bash
+now
+```
diff --git a/examples/catch-all-routes/components/header.js b/examples/catch-all-routes/components/header.js
new file mode 100644
index 0000000000000..bfc1981ffb241
--- /dev/null
+++ b/examples/catch-all-routes/components/header.js
@@ -0,0 +1,36 @@
+import Link from 'next/link'
+
+const Header = () => (
+
+)
+
+export default Header
diff --git a/examples/catch-all-routes/package.json b/examples/catch-all-routes/package.json
new file mode 100644
index 0000000000000..fd3227483d8ce
--- /dev/null
+++ b/examples/catch-all-routes/package.json
@@ -0,0 +1,15 @@
+{
+ "name": "catch-all-routes",
+ "version": "1.0.0",
+ "scripts": {
+ "dev": "next",
+ "build": "next build",
+ "start": "next start"
+ },
+ "license": "ISC",
+ "dependencies": {
+ "next": "latest",
+ "react": "^16.12.0",
+ "react-dom": "^16.12.0"
+ }
+}
diff --git a/examples/catch-all-routes/pages/about.js b/examples/catch-all-routes/pages/about.js
new file mode 100644
index 0000000000000..255d0764b4467
--- /dev/null
+++ b/examples/catch-all-routes/pages/about.js
@@ -0,0 +1,10 @@
+import Header from '../components/header'
+
+const About = () => (
+ <>
+
+
About page
+ >
+)
+
+export default About
diff --git a/examples/catch-all-routes/pages/index.js b/examples/catch-all-routes/pages/index.js
new file mode 100644
index 0000000000000..0f56525ada213
--- /dev/null
+++ b/examples/catch-all-routes/pages/index.js
@@ -0,0 +1,10 @@
+import Header from '../components/header'
+
+const Home = () => (
+ <>
+
+ Hello World!
+ >
+)
+
+export default Home
diff --git a/examples/catch-all-routes/pages/post/[...slug].js b/examples/catch-all-routes/pages/post/[...slug].js
new file mode 100644
index 0000000000000..d75fe949005d4
--- /dev/null
+++ b/examples/catch-all-routes/pages/post/[...slug].js
@@ -0,0 +1,16 @@
+import { useRouter } from 'next/router'
+import Header from '../../components/header'
+
+const Comment = () => {
+ const router = useRouter()
+ const slug = router.query.slug || []
+
+ return (
+ <>
+
+ Slug: {slug.join('/')}
+ >
+ )
+}
+
+export default Comment
diff --git a/examples/dynamic-routing/README.md b/examples/dynamic-routing/README.md
index 9d791190e9007..e5611c521fe48 100644
--- a/examples/dynamic-routing/README.md
+++ b/examples/dynamic-routing/README.md
@@ -1,8 +1,6 @@
# Dynamic Routing example
-This example shows usage of dynamic routing.
-
-This example contains two dynamic pages:
+This example shows how to do [dynamic routing](https://nextjs.org/docs/routing/dynamic-routes) in Next.js. It contains two dynamic routes:
1. `pages/post/[id]/index.js`
- e.g. matches `/post/my-example` (`/post/:id`)