Content First
This module provides a "Content First" tab on nodes and menus to view their plain text content without any design or layout distractions. It allows you to copy or download content as simple HTML or Markdown, and a sub-module helps audit content structure for accessibility and SEO. It also offers a Drush command to export nodes and menus as Markdown files.
The Content First module provides a simple tool for viewing the plain text content of any node without design, media, or layout distractions. It helps content teams, editors, and designers focus on what matters most: the content itself.
Whether you're drafting, reviewing, or rethinking your site's messaging, this module supports a true "content-first" approach by giving you a clean, layout-free version of your page.
Content First: Features
Content tab
The content first module adds a new tab to every node page. That tab shows a clean, structured text version of the page content.
From this tab, you can:
- View all text content (without layout noise): Markdown and simple HTML formats
- Copy it with one click
- Download it as plain text: Markdown and simple HTML
No configuration. No views to build. Just access to the content.
Markdown content visualization
(simple) HTML content visualization
Headings tree visualization
Headings tree visualization, including missing headers (SEO/Accessibility)
Content export
The module allows to select multiple content and download them all at once into a .zip so you can process the data elsewhere.
Menu visualization
Available since 2.1.0. The module adds a Content First tab to every menu edit page (/admin/structure/menu/manage/{menu}). That tab renders the full menu tree as plain Markdown, respecting the current content language, so you can copy or download the site navigation as structured text — useful for AI prompts, documentation, or content audits.
Drush export command
Available since 2.1.0. The content-first:export command (alias cf:export) exports nodes and menus as individual Markdown files to a local folder. Key options:
--entity=node|menu|all— choose what to export (default: all)--bundles— filter by content type or menu machine name--status— filter by published/enabled state--language— limit to specific language codes (nodes only)--folder— output path (defaults toprivate://content_first/)--rewrite-links— convert internal page links to local filenames for Obsidian or similar tools--assets-base-url— make relative asset URLs absolute (images, PDFs, etc.)--flatten-properties— flatten nested YAML front-matter keys with a dash separator (e.g.meta-titleinstead ofmeta: {title: ...}), required for tools like Obsidian that do not support nested YAML
Node files are named after the content path alias; menu files follow the pattern menu-{langcode}-{menu-id}.md.
Content First Audit: Features (sub-module)
Available since 2.0.2. The optional Content First Audit sub-module persists heading analysis results on every node save and provides site-wide reporting. It stores the H1 count and heading hierarchy validity per node and language, and includes:
- An admin report at
/admin/reports/content-firstlisting all nodes with their heading health, filterable by title, content type, language, H1 count, and hierarchy status.
- An overview page at
/admin/reports/content-first-auditwith a summary.
- A node overview page at
/node/[NID]/content-first/auditwith a node summary.
- A status report entry on
/admin/reports/statussummarizing nodes without H1, with multiple H1s, or with broken heading hierarchy.
Use cases:
- Content strategy and copywriting review sessions (human or AI)
- Pre-design content validation
- Content audits or UX writing sprints
- Minimal reading interface for accessibility reviews
- Bulk Markdown export for AI pipelines, knowledge bases, and Obsidian vaults
Usage
Install and enable the module.
- Assign the View Content First tab permission to the appropriate roles.
- Navigate to any node page — you'll see a new "Content First" tab.
- Click the tab to view the stripped-down, text-only version of the node.
- No additional configuration is needed.
Depends on
Dependencies of the latest stable release
- Entity Render Context
- node Drupal core
Required by
Tracked projects that depend on this one
No tracked projects depend on this one yet.
Activity
Release Timeline
Releases
| Version | Type | Core | Notes | Release date | |
|---|---|---|---|---|---|
| 2.3.1 | Stable | 10–11 | Aug 26, 2026 | ||
| 2.3.0 | Stable | 10–11 | New Metatags checks, deeper node overview, minor bug fixes | Jul 30, 2026 | |
| 2.2.2 | Stable | 10–11 | Jun 8, 2026 | ||
| 2.2.1 | Stable | 10–11 | Fix settings schema for tracked entity types and restrict audit tracking rebuild to nodes only | May 28, 2026 | |
| 2.2.0 | Stable | 10–11 | Introduced entity_regitry module and new audits | May 26, 2026 | |
| 2.1.4 | Stable | 10–11 | May 12, 2026 | ||
| 2.1.3 | Stable | 10–11 | May 8, 2026 | ||
| 2.0.6 | Stable | 10–11 | May 8, 2026 | ||
| 2.1.2 | Stable | 10–11 | May 7, 2026 | ||
| 2.1.1 | Stable | 10–11 | May 7, 2026 | ||
| 2.1.0 | Stable | 10–11 | Drush command to export and menu support | May 6, 2026 | |
| 2.0.5 | Stable | 10–11 | Minor change audit | Apr 29, 2026 | |
| 2.0.4 | Stable | 10–11 | Fix support translations content first audit submodule | Apr 29, 2026 | |
| 2.0.3 | Stable | 10–11 | Minor change on content first audit filter H1 | Mar 6, 2026 | |
| 2.0.2 | Stable | 10–11 | Add submodule audit for reporting heading audit results | Mar 6, 2026 | |
| 1.0.6 | Stable | 10–11 | ZIP Export creates folders when node title has a slash | Feb 12, 2026 | |
| 2.0.1 | Stable | 10–11 | ZIP Export creates folders when node title has an slash | Feb 12, 2026 | |
| 2.0.0 | Stable | 10–11 | Added entity_render_context as dependency | Feb 11, 2026 | |
| 2.x-dev | Dev | 10–11 | New major release | Feb 11, 2026 | |
| 1.0.5 | Stable | 10–11 | Dec 5, 2025 | ||
| 1.0.4 | Stable | 10–11 | Nov 26, 2025 | ||
| 1.0.3 | Stable | 10–11 | Nov 19, 2025 | ||
| 1.0.2 | Stable | 10–11 | Sep 8, 2025 | ||
| 1.0.1 | Stable | 10–11 | Aug 12, 2025 | ||
| 1.0.0 | Stable | 10–11 | Aug 12, 2025 | ||
| 1.0.0-beta11 | Pre-release | 10–11 | Aug 6, 2025 | ||
| 1.0.0-beta10 | Pre-release | 10–11 | Aug 6, 2025 | ||
| 1.0.0-beta9 | Pre-release | 10–11 | Jul 23, 2025 | ||
| 1.0.0-beta4 | Pre-release | 10–11 | Jul 23, 2025 | ||
| 1.0.0-beta8 | Pre-release | 10–11 | Jul 21, 2025 | ||
| 1.0.0-beta7 | Pre-release | 10–11 | Jul 18, 2025 | ||
| 1.0.0-beta6 | Pre-release | 10–11 | Jul 18, 2025 | ||
| 1.0.0-beta5 | Pre-release | 10–11 | May 29, 2025 | ||
| 1.0.0-beta3 | Pre-release | 10–11 | Apr 2, 2025 | ||
| 1.0.0-beta2 | Pre-release | 10–11 | Mar 26, 2025 | ||
| 1.0.0-beta1 | Pre-release | 10–11 | Mar 25, 2025 | ||
| 1.x-dev | Dev | 10–11 | Mar 25, 2025 |