Implementation checklist

Status labels align with Not started, In progress, and Done.

Task Status

A) Visibility system

Portal content uses a clear visibility flag so the UI, search engines, and snapshotting logic can agree on what is safe to show.

Definitions

  • Public: discoverable, listed, and indexable.
  • Unlisted: accessible by direct link, but hidden from listings and search.
  • Private: requires auth or membership checks before any content is rendered.

Policy engine outputs

  • canView: viewer has read access.
  • canEdit: viewer can edit or moderate.
  • canList: show in portal listings or feeds.
  • shouldIndex: allow search engine indexing.
  • shouldSnapshot: generate HTML snapshot for bots.

Default rules by content type

Content type Default visibility Listing behavior
Notes Private Visible to the author and invited teammates only.
Discussions Public Public discussions appear in the public index; unlisted threads stay hidden.
Dashboards Unlisted Direct-link access for shared dashboards, no global listings.

B) Indexing strategy

Indexing treats public pages like documents, not databases.

Documents, not databases

Public pages ship as stable HTML snapshots so crawlers see a cohesive document. GunJS then hydrates the live session for humans.

HTML-first + hydration

  • Generate HTML snapshots for public routes.
  • Serve snapshots to bots and to first-time visitors.
  • Hydrate with GunJS data after load to keep the UI live.

Snapshot storage options

  • Vercel Blob for immutable HTML snapshots.
  • Vercel KV / Redis for cached HTML strings.
  • Static object storage (S3-compatible) for backup snapshots.

C) SEO controls

Meta robots rules

  • Public: index,follow
  • Unlisted: noindex,nofollow
  • Private: noindex,nofollow + auth gate

Sitemap rules

Only public routes appear in sitemap.xml. Unlisted and private content never appears.

robots.txt rules

Disallow private and unlisted sections to keep crawlers away from gated paths.

D) Implementation plan

Phase 1: Visibility flags + noindex

Introduce the visibility field, policy helper, and meta robots rules.

Phase 2: Snapshots

Generate HTML snapshots for public pages and hydrate with GunJS on load.

Phase 3: Sitemap + robots

Publish sitemap.xml and robots.txt for public-only content.

Phase 4: Analytics

Track public discovery without adding external analytics scripts.

Definition of done

  • Visibility flags exist on every content type.
  • Policy helper drives UI gating and indexability decisions.
  • Public routes ship HTML snapshots and hydrate with GunJS.
  • Sitemaps include public routes only.
  • Private/unlisted routes are blocked from indexing.
  • Public pages include canonical URLs and OpenGraph tags.

Progress tracker

Checklist progress is stored in your browser only.

0 of 0 tasks completed

Storage key: portal_seo_plan_progress_v1