confluence-best-practices — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited confluence-best-practices (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Judgment layer for an agent that acts on Confluence (creates, organises, governs content) and, second, for a human authoring pages — the same structure serves both: what makes a page scannable makes it retrievable.
Instance-agnostic: discover the org's space taxonomy, conventions and working language; never assume them. Defaults are Confluence Data Center 10.2 / 9.2 LTS, with the Cloud counterpart noted inline.
An agent here acts through content-level REST/CQL — directly, or via an MCP server (e.g. mcp-atlassian), or by handing the user UI steps. The boundary that determines what to do versus what to advise is the same on every instance:
POST/PUT/GET against /rest/api/content (DC) or /wiki/api/v2/pages (Cloud).?expand=ancestors,version,metadata.labels and confirm the intended parent, the full label set and a version one higher than before (1 for a new page); re-read every changed restriction via /content/{id}/restriction. Every admin-lane item reaches the user as numbered steps. A write not read back is not done.So a good response usually = (a) the correct content action taken via REST/CQL, plus (b) a crisp, copy-pasteable recommendation for anything that needs an admin. This skill decides what and how to structure content; it is not a manual for any one tool — for setting up the mcp-atlassian server itself, that's the jira-confluence-mcp sibling skill.
Most Confluence dread is a usage problem, not a tool problem. The wikis that work are the ones with the least unmanaged sprawl. So, every time:
Most "new Confluence" coverage describes Cloud, and the DC gap is wide enough that wrong-dialect advice is unusable. This skill is DC-first, Cloud-compatible — know both columns. The single biggest trap is the editor and content format.
| Concept | Confluence Cloud (2026) | Confluence Data Center 10.2 / 9.2 (default) |
|---|---|---|
| Editor / content model | Fabric editor; content model ADF | own TinyMCE-based editor; content model storage format (XHTML-based). ADF does NOT apply to Confluence DC — and even on Cloud, storage format is the portable write target. |
| Page archiving | native, per-page (… > Archive) | space-level only — no native page archive (CONFSERVER-31010); use the move-to-archive-space workaround |
| AI | Rovo / Atlassian Intelligence built in | none native — DC reaches Cloud AI only via connectors. Don't depend on AI. |
| Automation | native Confluence automation rule-builder | not native — use Jira automation, an app, or the agent itself |
| Whiteboards / Databases / Folders / Smart Links / Guests / public links / page status | available | none on DC (group with a thin index page instead of a folder) |
| REST API | v1 and v2 (/wiki/api/v2, cursor paging) | v1 only (/rest/api/content, start/limit) |
| User identifier | `accountId` | `username` / `userKey` |
| Bundled on BOTH (don't mis-flag): Team Calendars, collaborative editing (≤12 editors), Analytics for Confluence (DC: "limited") | — | — |
DC versions, Java floors, EOL dates and the DC sunset live in references/cloud-vs-dc.md — read the instance's version before any version-gated advice; this skill is about using today's Confluence well, not migrating.
To tell which applies, check the REST base path: /wiki/api/v2/... works → Cloud; only /rest/api/content → DC. Full feature-split matrix in `references/cloud-vs-dc.md`.
The primitives and the placement decision:
Space CONTAINER + permission/ownership boundary — its own homepage, sidebar, admin
│
Page a UNIT OF CONTENT (one purpose)
│
Child page a page with exactly ONE parent (the tree is single-parent)The decision heuristic:
Describe by role, map to the org's names. DC's space types (team / knowledge-base / documentation / personal) are just starter templates that "don't really have much effect once created." So reason in roles — home, project-workspace, reference-KB, personal-scratch, department-intranet, meeting-notes — detect which role a space plays, and adapt to whatever the org named it. The one near-universal rule is consistency by type: spaces of the same role should be named alike and share a top-level structure.
Tree shape: shallow. Cap depth at ~3, maybe 4 levels — Atlassian ships an official "too many nesting levels" health check confirming deep trees have a real performance cost (and deep pages get neglected, "out of sight, out of mind"). Every space needs a homepage that orients and routes (overview + key links + label indexes). Re-home orphan pages (no parent, no inbound links).
Labels = cross-cutting; tree = containment (the analogue of "hierarchy rolls up, links don't"): the tree answers "where does this live" (one place); labels answer "what is this about" (many facets, and they reach across spaces). The same split exists for spaces — space categories are just labels on spaces.
Full treatment (the space-vs-page checklist, role table, folders caveat, orphan/depth fixes): `references/information-architecture.md`.
A recommendation that hardcodes a space name, a page title, or an English label is wrong on the next instance — and doubly wrong on a non-English one. Discover the org's real values, and anchor logic on language-independent keys.
| To learn… | How (tool-agnostic) | Language-safe anchor | |
|---|---|---|---|
| Spaces + keys + categories | GET /rest/api/space?expand=metadata.labels (DC); v2 /spaces + /spaces/{id}/labels?prefix=team (Cloud; setting a category still needs v1) | space `key` (immutable, a-z/0-9, forms the URL) | |
| Page tree / ancestors | `/content/{id}/child\ | descendant/page, ?expand=ancestors; DC /content/scan` | numeric content `id` |
| Labels actually in use | per page /content/{id}/label; instance-wide → CQL-facet | label text (lowercase, no spaces, only _/-) | |
| Available templates | `/rest/api/template/page\ | blueprint` | template id |
| What content really says | request `body.storage` | — | |
| Indexing language | not REST-exposed — admin setting | (advise only) |
The rules that prevent localized-content bugs:
vertrieb-nord.)The full discovery recipe, the act-vs-advise mapping, programmatic-write safety (storage format, the unique-title idempotency key, version-increment/409, not clobbering human formatting), CQL governance recipes, and the Cloud-vs-DC execution branches are the operational heart of this skill: `references/agent-execution-and-discovery.md`.
The named dread is "Confluence is where documentation goes to die." The mechanism is structural: creation is free, retirement is manual, so content rots silently (there's no test that goes red when a runbook references a dead service). De-bloat with these levers, highest-leverage first:
type=page AND lastmodified < startOfYear() (scope by space/owner), plus "no labels" and duplicate-title sweeps. Agent-actionable.Mechanics (retention rules, archive workaround, the dashboard storage format, performance numbers): `references/lean-content-and-lifecycle.md`.
"I can't find anything" is the #1 complaint — and it's the content, not the engine ("Confluence search isn't that bad; what's bad is the data fed into it"). Fix the corpus:
RUNBOOK – Payments – Failover), never generic ("Notes", "Meeting").text, title, label, space, type, ancestor/parent, lastmodified, creator).DOC-8510 → doc AND 8510); no leading wildcard; CJK uses bigram tokenization with exact-search off; umlaut+wildcard is broken (but plain-term accent folding works). OpenSearch (DC, opt-in since 9.0) is faster, not more relevant.Full CQL field reference, label governance, and the indexing/language caveats: `references/findability-and-search.md`.
The second pillar. The same structure serves human scanning and machine retrieval:
The mistakes→fix table, Diátaxis mapping, macro guidance, and storage-format snippets: `references/authoring-and-readability.md`.
Permission mechanics, the "can't see the page" playbook, and integration: `references/permissions-and-governance.md`.
Match the symptom, name the cause, apply the smallest fix:
| Symptom the team reports | Likely root cause | Lean fix |
|---|---|---|
| "I can't find anything" | Polluted corpus — stale pages, thin metadata, generic titles | Archive dead spaces; distinctive titles; controlled labels; curated homepages — not a new search engine |
| "A page won't show up / I can't see it" | Inherited view restriction on an ancestor | Walk up the tree; verify space-View; remove/adjust the ancestor restriction |
| "Our wiki is a graveyard / full of stale pages" | No ownership, no review cadence, no retirement | Page Properties (Owner/Review-Date) + Page Properties Report dashboard; CQL rot sweep; archive workaround |
| "Same info is in five places" | Copy-paste instead of reuse | Excerpt/Include from one canonical page; a "what-belongs-where" note |
| "Where do I put this?" | Space-vs-page decided ad hoc | Teach the role-based decision; page (not space) by default; label don't duplicate |
| "This page is a wall of text" | No structure, no front-loading | H2/H3 headings + BLUF summary + chunking; split by purpose; ToC on long pages |
| "Confluence is slow / the editor lags" | Too many spaces (>8k) or a giant macro/table-heavy page | Audit/consolidate spaces; split heavy pages; fewer macros |
| "We track tasks in Confluence and it's always stale" | Using a wiki as a tracker | Move status to Jira; embed the Jira Issues macro for live status |
| "Non-English search/labels misbehave" | Matching localized strings; wildcard/CJK limits | Anchor on space key / content ID / label / CQL; set expectations on search limits |
lastmodified hit) — old ≠ unused: date-stale pages include homepages, templates, policies, Include/Excerpt sources and parents of fresh pages, and a retention rule can purge the trash for good. Do not write the unattended delete loop. Deliver instead: read-only inventory CSV → per-space owner review → move approved pages to an archive space. Deletion is a separate, later run — only after an XML export of the affected spaces exists and the owner signs off.| File | Read when… |
|---|---|
references/information-architecture.md | Deciding space vs page vs child; setting a space-role standard; tree depth; labels-vs-tree; orphans; folders |
references/lean-content-and-lifecycle.md | De-bloating — wiki rot, the <8,000-spaces guardrail, archive-space workaround + retention, the Page-Properties-Report dashboard, Excerpt/Include, CQL pruning |
references/findability-and-search.md | Findability — CQL field reference, label vocabulary, unique titles, search/indexing caveats (CJK, wildcard), OpenSearch |
references/authoring-and-readability.md | Writing readable pages — headings/ToC/BLUF, Diátaxis page-typing, macros that earn their place, tables, templates, accessibility, agent-retrievability |
references/permissions-and-governance.md | Permissions (3-layer model, cascade, "can't see the page"), governance levers, and the Confluence↔Jira boundary + macros |
references/agent-execution-and-discovery.md | Acting on Confluence as an agent — discovery, act-vs-advise, storage-format writes + idempotency/version safety, CQL recipes, language-safe anchors, Cloud-vs-DC branches |
references/cloud-vs-dc.md | Versions/EOL/sunset; the Cloud-only / DC-only / both feature matrix; the editor & storage-format situation |
references/sources.md | Verifying or freshening a claim — per-row source + tier + what it supports |
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.