+ 404
+ Either this page is private or doesn't exist.
+
+ )
+}
+
+export default (() => NotFound) satisfies QuartzComponentConstructor
diff --git a/quartz/plugins/emitters/404.tsx b/quartz/plugins/emitters/404.tsx
new file mode 100644
index 00000000..785c873d
--- /dev/null
+++ b/quartz/plugins/emitters/404.tsx
@@ -0,0 +1,56 @@
+import { QuartzEmitterPlugin } from "../types"
+import { QuartzComponentProps } from "../../components/types"
+import BodyConstructor from "../../components/Body"
+import { pageResources, renderPage } from "../../components/renderPage"
+import { FullPageLayout } from "../../cfg"
+import { FilePath, FullSlug } from "../../util/path"
+import { sharedPageComponents } from "../../../quartz.layout"
+import { NotFound } from "../../components"
+import { defaultProcessedContent } from "../vfile"
+
+export const NotFoundPage: QuartzEmitterPlugin = () => {
+ const opts: FullPageLayout = {
+ ...sharedPageComponents,
+ pageBody: NotFound(),
+ beforeBody: [],
+ left: [],
+ right: [],
+ }
+
+ const { head: Head, pageBody, footer: Footer } = opts
+ const Body = BodyConstructor()
+
+ return {
+ name: "404Page",
+ getQuartzComponents() {
+ return [Head, Body, pageBody, Footer]
+ },
+ async emit(ctx, _content, resources, emit): Promise