Craft

Empty states need their own interface copy

I kept designing list pages with careful attention to filters, sorting controls, and card layouts. Then I'd build them and realize nobody would see any of that work until after they'd added their first item. The empty state came first, and I'd left it blank.

An empty state is what users see when a collection, dashboard, or filtered view has nothing to show. No blog posts yet. No search results. No items match the selected filters. These aren't error conditions — they're normal parts of using a site — but they need interface copy just as much as buttons and field labels do.

Write for the user who doesn't know what comes next

A blank page with just a heading leaves people guessing what they're supposed to do. I've watched users stare at an empty blog archive, unsure if the site was broken or if they needed to create something.

Good empty state copy names what's missing and hints at the next step:

  • Blog archive (no posts): "No posts published yet. Draft your first post to get started."
  • Filtered product list (no matches): "No products match these filters. Try adjusting your selections."
  • User dashboard (new account): "Welcome! Add your first project to see it here."

The copy doesn't need to be elaborate. It just needs to confirm the page is working and suggest what happens next.

Don't rely on layout alone

I used to think a big plus icon or an "Add New" button would be enough. It's not. A button without context assumes users know what they're looking at and what the button creates. New users don't have that context.

Add a sentence or two above the button. Explain what would normally appear here and how to create it. The button becomes obvious once the copy establishes what the page is for.

Empty states aren't just for new sites

Even established sites have empty states:

  • Search results with no matches
  • Archive pages filtered to a month with no posts
  • User profiles with no activity yet
  • Shopping carts after checkout

Each of these moments needs copy. Test your search by checking what happens when nothing matches. Write the "no results" message before you write the results template.

Treat empty states as first-run experiences

For your own CMS or admin interface, empty states are onboarding. The first time someone logs in, they see empty lists everywhere. That's your chance to teach them what each section does.

I started writing empty state copy during setup, not after launch. It forced me to explain each content type in plain terms, which made the whole interface clearer.

Write it early, not as cleanup

Empty state copy isn't polish you add later. It's structural. When you define your content types, write the empty state message for each one. When you build a filtered view, write the "no matches" text at the same time.

If you wait until the end, you'll forget half of them. And the ones you miss will be the exact screens new users see first.

← All posts