404 page that doubles as a sitemap: left-aligned messaging over four columns of grouped section links, so visitors on a large site can jump straight to the area they wanted.
A 404 page that doubles as a sitemap: left-aligned messaging over four columns of grouped section links, so a visitor on a large site can jump straight to the area they wanted instead of starting from the homepage.
Pro blocks install through the shadcn CLI with your license key and ship their full source. Docs and live previews stay open to everyone, so you can read every block's details first.
Swap YOUR_EMAIL and YOUR_KEY for the email and license key on your account. Find your license key on your account page.
Radix flavor
npx shadcn add "https://ui.beste.co/r/error13?email=YOUR_EMAIL&license_key=YOUR_KEY"Base UI flavor
npx shadcn add "https://ui.beste.co/r-base/error13?email=YOUR_EMAIL&license_key=YOUR_KEY"This installs the block to components/beste/block/error13.tsx, plus the button shadcn/ui primitive it uses for the closing action.
The installed file exports error13Demo alongside the block: the exact props behind the preview above. Spread it to get a working directory page in one line.
import { Error13, error13Demo } from "@/components/beste/block/error13";
export default function NotFound() {
return <Error13 {...error13Demo} />;
}Then pass your own sections. Two groups read as well as four:
import { House } from "lucide-react";
import { Error13 } from "@/components/beste/block/error13";
export default function NotFound() {
return (
<Error13
code="Error 404"
heading="We cannot find that page"
description="Here is everything on the site in one place."
groups={[
{
title: "Product",
links: [
{ label: "Overview", href: "/product" },
{ label: "Pricing", href: "/pricing" },
],
},
{
title: "Developers",
links: [
{ label: "Documentation", href: "/docs" },
{ label: "Status", href: "/status" },
],
},
]}
buttons={[{ label: "Back to home", href: "/", icon: House }]}
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
code | string | – | Small uppercase status label above the heading |
heading | string | – | Main page heading, rendered as an h1 |
description | string | – | Explanatory paragraph under the heading |
groups | DirectoryGroup[] | [] | Link columns, each with its own caption |
buttons | ActionButton[] | [] | Action row below the directory |
className | string | – | Extra classes for the outer <section> |
type DirectoryGroup = {
title: string;
links: DirectoryLink[];
};
type DirectoryLink = {
label: string;
href: string;
};
type ActionButton = {
label: string;
href: string;
variant?: "default" | "outline" | "secondary" | "ghost";
icon?: LucideIcon;
};sm and four from lg, so four groups fill the last row exactly. Three or five groups still tile, they simply leave a gap in the final row at lg.ul/li list inside each column, which keeps the directory meaningful to screen readers and crawlers rather than reading as a wall of loose anchors.groups is non-empty.error1
Minimal centered 404 page with a large error code, a heading, a short explanation, two call-to-action buttons, and a divided row of popular page links underneath.
error12
Blog 404 that turns a dead post URL into reading: centered messaging above a three-up article grid with cover images, category badges, dates, and read times.
error2
Search-first 404 page: a controlled search field with a submit handler, plus a bordered list of suggested pages with titles, descriptions, and hover arrows.
error9
Left-aligned 404 for documentation and marketing sites: the requested path is shown struck through in monospace above a did-you-mean box linking to the closest matching page.
error11
Store 404 for dead product URLs: the message and shopping buttons sit above a four-up product grid with square imagery, prices, and optional strikethrough compare-at prices.
error6
The smallest possible 404: the status code and the message sit on one line separated by a vertical rule, stacking on mobile, with a single outline button underneath.