# Blog or resource section has clear structure

- **Pattern:** `ab-001737` (`marketing-content-quality.content-completeness.blog-resource-structure`)
- **Severity:** low
- **Lifecycle:** active
- **Last modified:** 2026-04-18
- **Canonical URL:** https://auditbuffet.com/patterns/ab-001737
- **License:** CC-BY-4.0 — attribute to AuditBuffet Pattern Catalog (https://auditbuffet.com/patterns/ab-001737)

## Why it matters

A blog or resources section without navigational structure is harder to trust and harder to use than no blog at all. Visitors who land on a blog index page with no post dates cannot assess content freshness — for any topic where recency matters (tech, compliance, product features), undated posts are untrustworthy. Blog posts without a visible path back to the index trap visitors: they read one post and cannot find the next one, so they leave the site entirely. For SEO, a blog listing page with accessible titles and dates signals a maintained content repository to crawlers; a blog with no listing page and posts only accessible via direct URL provides minimal SEO benefit and zero organic discovery.

## Severity rationale

Low because a structurally deficient blog is harder to use and trust than no blog, and provides diminished SEO benefit — but the impact is limited to visitors who actively seek out the blog.

## Remediation

A minimally structured blog needs three elements:
```
1. A listing page at /blog with post titles visible and sortable by date
2. A visible date on each individual post
3. A "← Back to Blog" link or breadcrumb on each post page
```

In a Next.js MDX blog, ensure each post's frontmatter includes a `date` field and that the listing component reads and displays it:

```tsx
// app/blog/page.tsx — listing page showing dates
import { getAllPosts } from '@/lib/mdx'

export default async function BlogIndex() {
  const posts = await getAllPosts()  // returns [{title, slug, date, excerpt}]
  return (
    <main>
      <h1>Blog</h1>
      <ul>
        {posts.map(post => (
          <li key={post.slug}>
            <Link href={`/blog/${post.slug}`}>{post.title}</Link>
            <time dateTime={post.date}>{formatDate(post.date)}</time>
          </li>
        ))}
      </ul>
    </main>
  )
}
```

Add `<Link href="/blog">← Back to Blog</Link>` at the top of each post's `app/blog/[slug]/page.tsx`.

## Detection

- **ID:** `blog-resource-structure`
- **Severity:** `low`
- **What to look for:** Count all relevant instances and enumerate each. If a blog, resources section, or knowledge base exists (detected by the presence of a `/blog`, `/resources`, `/articles`, or `/posts` route), examine whether it has: a visible list of posts/articles with titles and dates, a way to navigate between posts (next/previous or back-to-list link), and whether the most recent post is within the last 6 months (check the date on the most recent post if dates are present). If no blog exists, this check is not applicable.
- **Pass criteria:** The blog or resource section has a listing page with post titles visible, individual posts have an identifiable date, and there is a navigation path back to the listing from individual posts. At least 1 implementation must be verified.
- **Fail criteria:** A blog exists but has no listing page (posts are only accessible via direct URL), posts have no visible dates, or the blog listing has no titles (only thumbnails or slugs).
- **Skip (N/A) when:** No blog, resources section, or knowledge base detected. Signal: no `/blog`, `/resources`, `/articles`, `/posts`, or equivalent route found.
- **Detail on fail:** Describe the structural gap. Example: `"Blog exists at /blog but posts have no visible dates — visitors cannot assess content freshness"` or `"Blog posts are accessible but the /blog listing page is empty — no post list"`
- **Remediation:** A blog without structure is harder to navigate and less credible. Add the minimum: a listing page with post titles and dates, and a "Back to Blog" link on each post.

  For Next.js MDX blogs: if you're using a file-based MDX setup, ensure each post's frontmatter includes a `date` field and that your listing component renders it. For a dynamic CMS, confirm that the listing query includes and displays the publish date.

  Review the configuration in `src/` or `app/` directory for implementation patterns.

Taxons: content-integrity, user-experience

HTML version: https://auditbuffet.com/patterns/ab-001737
