LLL Internal Anchor Review / 内部アンカー点検

Check #fragment links in a saved article against ids a page can contain; not found is not broken. 保存記事の#リンクを点検。

Public name@mrhandsome39.bsky.social/internal-anchor-review

Or open Registry in your EmDash admin and search for this name.

Permissions

Plugins get only the capabilities they declare and you approve. Your EmDash admin lists these again before anything installs.

  • Read content

    Read entries from your site’s content collections.

  • Read content structure

    Read the collections and fields defined on your site.

FAQ

Why are headings never matched? EmDash 1.4.0 renders Portable Text headings (h1-h6) and paragraphs without an id, and does not render block keys. A link such as #setup only works if something else supplies the id. The ids this plugin can see are those in a top-level inline HTML block that is not isolated (id on any tag the host sanitizer keeps, name on a link). Isolated HTML blocks run in a frame; their ids are not part of the page. HTML blocks nested in columns or cover blocks are not rendered by core.

Is "not found" a broken link? No. A theme, template or plugin (for example a table of contents) may add ids while rendering; they are not in saved content and cannot be seen here. Treat the result as a prompt to check the live page. "Unknown" is a different result: some blocks (for example a block type added by another plugin) or ids could not be read, so a matching id may exist; it is not a statement that the id is missing.

Which fields supply ids? All Portable Text fields of the same entry (same-page links) or of the linked published entry (other pages), taken from the published saved snapshot. Drafts and pending revisions are never read.

How are fragments matched? The fragment is percent-decoded and compared exactly (case-sensitive). #top and an empty fragment mean the top of the page when no element has that id. A fragment with invalid percent-encoding is reported separately.

Which links are checked? Standard link marks in the chosen field whose URL has a fragment and points at the same origin (taken from the open entry's public URL). Query strings are ignored. External URLs, mail/tel and other schemes are skipped and counted. Links without a fragment are the job of Internal Link Target Review.

Limits. Field JSON 128 KiB, 2000 blocks, 200 links, 10 linked entries read per request, 200 published entries scanned for the URL list (more = list incomplete), report 48 KiB. Exceeding a limit rejects the whole result.

Security

Read capabilities only: content:read and schema:read. No writes, KV, storage, external HTTP, cron or API keys. Private editor panel using the host permission content:edit_own_drafts. The site origin comes only from the host's public URL of the open entry; there is no origin input. The entry comes only from the host-attested editor context. Results exist only for the request; copied reports contain private link text, paths and fragments, so choose where to share them. Query strings are never shown. Report vulnerabilities to contact@lx3.cafe without secrets.

読取2権限のみ。本文変更・保存・外部通信なし。originは開いている記事の公開URLから取得し、入力欄はありません。コピーしたレポートにはリンクの表示文字・パス・fragmentが含まれます。queryは表示しません。

Report cells and spreadsheets. The copied report is tab-separated plain text. A cell that begins with =, +, - or @ (after optional whitespace/control characters) is written with a leading apostrophe (') so a spreadsheet does not run it as a formula. Cells containing tab, line break or double quote are wrapped in double quotes (" doubled).

コピーしたレポートはタブ区切りの文字です。= + - @ で始まるセルには先頭に ' を付け、表計算ソフトで式として実行されないようにしています。

Changelog

0.1.0

Adds a review panel that checks #fragment links in one saved Portable Text field of a published article. Same-page fragments and fragments of links to other published entries are compared with the ids a rendered page can contain. Results: found / found but duplicated / top of page / not found in the saved ids / unknown (unread blocks or undecodable ids remain) / target not readable. Ids inside iframe content, CDATA, processing instructions, xmp and plaintext are not counted, because the host sanitizer does not output them as elements;   is decoded.

Installation

Install as a sandboxed EmDash plugin (EmDash 1.4.0 or later, below 2). Open a published, saved article and use the "Internal Anchor Review / 内部アンカー点検" editor panel. Read-only; no configuration.

Keep exploring

More plugins like LLL Internal Anchor Review / 内部アンカー点検

Browse by keyword, or see everything @mrhandsome39.bsky.social publishes.

Install on your site

Open in EmDash

LLL Internal Anchor Review / 内部アンカー点検

@mrhandsome39.bsky.social/internal-anchor-review

Choose the EmDash site where you want to review this plugin. Nothing is installed until you confirm its permissions in that site's admin.

This browser will remember the site. You can change it next time.