Skip to content

Shell (#217): published-doc SEO — author content moved into a cross-origin iframe #258

Description

@yayashuxue

Context

The cross-origin iframe shell (#217) fixes the layout-instability ("歪") class of bugs by moving the author document into a same-origin, sandboxed /frame iframe (opaque origin) and keeping tdoc chrome in the outer shell. Author CSS can no longer touch the chrome — structurally, not by luck.

That isolation has an SEO cost we need a decision on before rollout.

The problem

Old overlay (single-origin) Shell (this re-arch)
GET /d/<slug>/v/<n> returns author content inline (overlay injected) chrome + <iframe src="…/frame">
Where the doc text lives in the crawled page in /frame
/frame direct access n/a 403 (gated on Sec-Fetch-Dest: iframe)

So a crawler hitting a published doc URL sees the shell chrome + an iframe, not the prose. Googlebot can render iframes and may index their content, but the long-standing official guidance is that iframe content is not guaranteed to be attributed to the host page — it's weaker and unreliable versus inline content. Net: published docs would index worse than they do today.

This is a genuine tension: isolation (iframe) ↔ SEO (inline content) — the same response can't easily do both (inline content is exactly what author CSS pollutes).

Proposed fix (keeps both isolation AND SEO; does not require reverting the shell)

Give the author content a real, crawlable URL + canonical:

  1. Allow a top-level GET of the content document — either ungate /frame for navigations or add a dedicated /d/<slug>/v/<n>/raw. It stays safe: the sandbox CSP keeps the origin opaque (author JS still inert), and frame-ancestors 'self' prevents third-party framing. Top-level access just shows the bare (public) content.
  2. That content page carries <link rel="canonical" href="/d/<slug>/v/<n>"> and goes into the sitemap.
  3. Googlebot crawls the content page, sees the prose, attributes it to the doc URL.

This composes cleanly with the "delete overlay.js entirely / full migration" direction.

Decision needed

Do we want published tdoc docs to be indexed by search engines?

  • If docs are shared by direct link (not search-discovered) → current shell is acceptable; defer this.
  • If organic/search traffic matters → the crawlable-content-URL + canonical work is a merge blocker for the shell and should ship in Cross-origin iframe shell for author documents #217 (or immediately after, before the worker cut reaches production).

Related: #217 (cross-origin iframe shell). Homepage/site pages have the same consideration and are planned to render as plain server-rendered pages (content inline, no iframe) — that path is SEO-safe by construction.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions