Broken Link Auditor logo

Broken Link Auditor

Organization
pnp
broken-link-auditor

Audits SharePoint pages, news posts, and hyperlink fields for broken or risky links and saves a self-contained HTML link-health report to the site. It is strictly read-only for content and only writes the final report file. Use when the user says: - "broken link audit" - "find broken links" - "check dead links on this site" - "audit links in this library" - "scan pages for broken links" - "which SharePoint links are broken"

Overview

Publisherpnp
Repositorysharepoint-skills
Skill namebroken-link-auditor
Stars
141
Forks
60
Bundled files
Instructions only
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • Self-contained

    Everything the model needs lives in the instructions — no extra files to sync.

  • Open source

    Published by pnp on GitHub. Read the source before you install it.

Installation

Install the Broken Link Auditor AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/pnp/sharepoint-skills/tree/main/Skills/broken-link-auditor/broken-link-auditor
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/pnp/sharepoint-skills.git /tmp/sharepoint-skills
mkdir -p .claude/skills
cp -r /tmp/sharepoint-skills/Skills/broken-link-auditor/broken-link-auditor .claude/skills/broken-link-auditor
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Broken Link Auditor in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Broken Link Auditor on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Broken Link Auditor is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Broken Link Auditor

Purpose

Broken or stale links make SharePoint sites feel unreliable, especially after migrations, re-orgs, and content cleanups. This skill audits link health across SharePoint pages, news posts, libraries, lists, or selected items and saves a self-contained HTML report that teams can act on. It is strictly read-only for content: it never edits pages, files, metadata, or links. The only thing it writes is the final HTML report file.

Trigger Phrases

Activate this skill when the user says any of the following (or close variations):

  • "broken link audit" / "dead link audit"
  • "find broken links" / "check broken links"
  • "check dead links on this site"
  • "audit links in this library"
  • "scan pages for broken links"
  • "which SharePoint links are broken"

Inputs & Scope

Determine the reporting scope from the user's request and the current context, in this order:

  1. Selected items — if the user has pages, files, or folders selected or says "these/this", audit those items first.
  2. Named library, list, or Site Pages — if the user names one, resolve it on the current site.
  3. Current library or current Site Pages context — if the user is already in one, use it.
  4. Whole current site — if no narrower scope is clear, scan accessible Site Pages plus hyperlink-bearing items in accessible user-created lists and libraries.
  5. If no scope can be resolved, ask the user which library, page set, or site scope to audit. Do not guess.

Only inspect content the current user can already read. Never invent pages, items, targets, or HTTP outcomes.

What counts as a link

Audit the following when present:

  • Links embedded in SharePoint page and news post content
  • Hyperlink / URL columns on list items or library items
  • Obvious SharePoint links stored in plain text fields when the user explicitly asks for a broader scan

Ignore the following unless the user explicitly asks:

  • Mailto links
  • Telephone links
  • JavaScript pseudo-links
  • Anchors that only jump within the same page and do not reference another resource

Steps

Step 1 — Resolve the scan targets

  • Resolve the site, list/library, folder, page set, or selected items from the user's request and current SharePoint context.
  • For whole-site audits, enumerate accessible user-created lists/libraries plus the Site Pages library.
  • Record the resolved scope exactly as it exists. If resolution is partial, keep going with the resolvable part and note the limitation in the report.

Step 2 — Discover candidate fields and content

  • For each list or library in scope, inspect the schema first and identify:
    • hyperlink / URL columns,
    • page or rich-text fields that can contain embedded links,
    • label fields to identify each item in the report.
  • For Site Pages and news posts, include the page title, URL/path, last modified date, editor, and the rich page content fields needed to extract links.
  • Exclude system-only columns from the report unless they are needed to identify the source item.

Step 3 — Read items and extract links

  • Page through every item in scope. Do not stop at the first page.
  • For each source item, extract links and retain:
    • source item title/name,
    • source item URL/path,
    • source type (page, news post, file, list item),
    • field or content region where the link was found,
    • the raw target URL.
  • Normalize URLs before checking them:
    • trim whitespace,
    • decode obvious HTML-escaped forms,
    • resolve relative SharePoint URLs against the current site,
    • preserve the original value for reporting.
  • Deduplicate exact duplicate checks so the same target is not revalidated unnecessarily, but still report every source occurrence.

Step 4 — Validate internal SharePoint links

For links that point to the current tenant or to relative SharePoint URLs:

  • Try to resolve the target as a page, file, folder, list, or item using SharePoint discovery, path-based lookup, or item retrieval tools.
  • Classify the result:
    • Valid — target exists and is reachable in the available data.
    • Broken — target is clearly missing, deleted, malformed, or resolves to a not-found outcome.
    • Inconclusive — target may exist but cannot be confirmed because of permission limits or unavailable tooling.
  • Do not label a permission-denied target as broken. Mark it Inconclusive (permission-limited) instead.

Step 5 — Validate external links carefully

For links outside SharePoint:

  • Use safe read-only URL checks where available, preferring a lightweight HEAD request and falling back to a minimal GET only when needed.
  • Follow normal redirects up to a small limit and record the final outcome.
  • Use a short timeout and never let one slow domain block the whole scan.
  • Classify the result:
    • Valid — reachable 2xx response
    • Redirected — target resolves after redirect
    • Broken — 4xx/5xx, DNS failure, malformed URL, or unreachable after retry
    • Inconclusive — timeout, bot protection, authentication wall, or network restriction
  • Treat transient failures carefully. Retry once before calling an external link broken.

Step 6 — Score severity and prepare findings

Assign severity at the link-occurrence level:

  • High — missing internal SharePoint target, malformed internal URL, or clearly broken navigation link from a page/news post
  • Medium — broken external link, repeated redirect chain, or broken library/list hyperlink
  • Low — redirected but reachable link, suspicious formatting, or other cautionary finding
  • Info — valid result recorded only for rollups or when the user explicitly asks for a full inventory

Track:

  • total links scanned,
  • unique targets checked,
  • broken count,
  • valid count,
  • redirected count,
  • inconclusive count,
  • internal vs external split,
  • top affected source items,
  • most common broken domains or missing SharePoint paths.

Step 7 — Build a self-contained HTML report

Draft a single self-contained HTML file:

  • No scripts. No external CSS, fonts, images, or other resources. Inline CSS only.
  • Include a summary band with: scope audited, total links scanned, broken count, internal / external counts, inconclusive checks, and unique targets checked.
  • Include a severity summary showing High / Medium / Low findings.
  • Include a top affected items section showing the pages or items with the most broken links.
  • Include a findings table with one row per link occurrence:
    • source item,
    • source type,
    • field/region,
    • displayed or raw target URL,
    • normalized target URL,
    • internal/external,
    • status,
    • severity,
    • detail / HTTP result / limitation note
  • Highlight rows by severity and status:
    • red for broken high-risk findings,
    • amber for medium-risk or inconclusive findings,
    • blue/gray for redirects and informational rows.
  • Include a prioritized remediation list in plain English, for example:
    • "Update 6 links on the Benefits page that still point to the old HR site."
    • "Review 4 permission-limited links in the Executive library."
    • "Replace 3 malformed relative URLs in the Policies list."
  • Include a limitations section whenever data was partial, throttled, inaccessible, or not externally checkable.

Step 8 — Save the report

  • Save the HTML file in a Link Reports folder in an appropriate document library on the current site.
  • If the folder does not exist, create only that report folder and only when needed for saving the report.
  • Use a clear filename: Broken-Link-Report-<Scope>-YYYY-MM-DD-HHMM.html

Step 9 — Respond to the user

After saving, reply with a compact Markdown summary and the report link:

markdown
# Broken link audit complete

[Open the report](<link>)

- Scope: <site, library, pages set, or selected items>
- Links scanned: <n>
- Broken links: <n>  (High <n> · Medium <n> · Low <n>)
- Inconclusive: <n>
- Top issue: <1 concise sentence about the highest-impact finding>

Example

User: "Run a broken link audit on Site Pages."

Agent response after processing:

I audited Site Pages and checked 184 links across 27 pages.

MetricResult
Broken links19
High / Medium / Low7 / 9 / 3
Inconclusive4
Top affected pageBenefits Hub (5 broken links)

I saved the report to Link Reports/Broken-Link-Report-Site-Pages-2026-08-02-1615.html. Highest-impact issue: 7 page links still point to deleted legacy pages under /sites/hr-old/.

Constraints

  • Strictly read-only for content. Never edit pages, replace links, update list items, rename files, move content, or change site structure. The only write is the final HTML report file (and, if needed, the Link Reports folder that holds it).
  • Never invent HTTP results, target existence, or permissions. If a check cannot be completed, say so plainly.
  • Do not classify a target as broken when the only evidence is lack of permission. Mark it Inconclusive (permission-limited) instead.
  • Page through the full scope; if any read is partial or throttled, surface that in the report.
  • Keep the HTML fully self-contained: no scripts, no external assets, inline CSS only.
  • Prefer validating internal SharePoint links before external links so the most actionable site issues are always covered first.

Frequently asked questions

What does the Broken Link Auditor AI skill do?

Audits SharePoint pages, news posts, and hyperlink fields for broken or risky links and saves a self-contained HTML link-health report to the site. It is strictly read-only for content and only writes the final report file. Use when the user says: - "broken link audit" - "find broken links" - "check dead links on this site" - "audit links in this library" - "scan pages for broken links" - "which SharePoint links are broken"

Why use Broken Link Auditor on TypingMind?

Because you install it once and use it with any model. Broken Link Auditor is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Broken Link Auditor in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/pnp/sharepoint-skills/tree/main/Skills/broken-link-auditor/broken-link-auditor. TypingMind reads its SKILL.md and installs it as a skill you can enable per chat.

Which AI models can use Broken Link Auditor?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Broken Link Auditor?

As many as you like. As long as a model supports skills, you can use Broken Link Auditor with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Broken Link Auditor AI skill free?

Yes. It is published on GitHub by pnp under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇