{"slug":"fixing-broken-links","title":"fixing-broken-links","summary":"Crawl all links in a file or project, test each for a valid HTTP response, report broken ones, and fix or remove them.","platform":"Cursor","tags":[],"authorName":"LLM Mart","authorSlug":"llm-mart","score":0,"source":"github","price":null,"verified":false,"createdAt":"2026-08-12T22:23:31.25531Z","repo":{"url":"https://github.com/spencerpauly/awesome-cursor-skills","stars":813,"forks":149,"license":"CC0-1.0","updatedAt":"2026-08-02T02:41:53Z"},"bodyHtml":"<hr>\n<h2>name: fixing-broken-links\ndescription: Crawl all links in a file or project, test each for a valid HTTP response, report broken ones, and fix or remove them.\nuser-invocable: true</h2>\n<h1>Fixing Broken Links</h1>\n<p>Scan a file (or set of files) for URLs, test every link, and fix any that are broken.</p>\n<h2>Workflow</h2>\n<h3>1. Extract All Links</h3>\n<p>Read the target file(s) and collect every URL:</p>\n<ul>\n<li>Markdown links: <code>[text](url)</code></li>\n<li>Bare URLs: <code>https://...</code></li>\n<li>HTML <code>href</code> and <code>src</code> attributes</li>\n<li>Reference-style link definitions: <code>[id]: url</code></li>\n<li>Local relative paths: <code>./path/to/file</code>, <code>resources/foo/SKILL.md</code></li>\n</ul>\n<h3>2. Test Each Link</h3>\n<p><strong>For external URLs:</strong></p>\n<ul>\n<li>Use <code>curl -sL -o /dev/null -w \"%{http_code}\" --max-time 10 \"&lt;url&gt;\"</code> to get the HTTP status code</li>\n<li>Batch independent checks for speed (run multiple curl commands in parallel or in quick succession)</li>\n<li>Classify results:\n<ul>\n<li><code>200</code>–<code>299</code> → OK</li>\n<li><code>301</code>/<code>302</code> → OK but note the redirect target</li>\n<li><code>403</code> → Might be valid (some sites block curl); try with a browser user-agent header</li>\n<li><code>404</code> → Broken</li>\n<li><code>429</code> → Rate limited; retry once after a short pause</li>\n<li><code>000</code> or timeout → Retry once; if still failing, mark as unreachable</li>\n</ul>\n</li>\n</ul>\n<p><strong>For local file paths:</strong></p>\n<ul>\n<li>Check if the file exists on disk with <code>[ -f \"path\" ]</code></li>\n<li>If it's a relative path, resolve it from the file's directory</li>\n</ul>\n<h3>3. Fix Broken Links</h3>\n<p>For each broken link:</p>\n<ol>\n<li>Search the web for the correct/current URL (the resource may have moved)</li>\n<li>If found, replace the old URL with the new one</li>\n<li>If the resource no longer exists, note it and either:\n<ul>\n<li>Remove the link and leave the text</li>\n<li>Comment it out with a note</li>\n<li>Replace with an archived version (web.archive.org)</li>\n</ul>\n</li>\n</ol>\n<h3>4. Report</h3>\n<p>Produce a summary table:</p>\n<pre><code>| URL | Status | Action |\n|-----|--------|--------|\n| https://example.com/page | 200 | OK |\n| https://old.example.com/moved | 404 → 301 | Updated to https://new.example.com/page |\n| ./docs/missing.md | MISSING | Removed link |\n</code></pre>\n<h2>Tips</h2>\n<ul>\n<li>For large files with many links, batch curl calls to avoid slowdowns</li>\n<li>Some sites (GitHub, npm) rate-limit aggressively — space out requests</li>\n<li>Always re-read the file after making changes to confirm replacements didn't break formatting</li>\n<li>For Markdown files, verify link syntax is preserved: <code>[text](url)</code> not <code>[text]( url )</code> (no extra spaces)</li>\n</ul>\n","files":[{"path":"SKILL.md","sizeBytes":2324,"isText":true}],"reviewScore":null,"reviewSummary":null,"trust":{"provenance":"trusted-source-unreviewed","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow.","bodySource":null},"bodyLocked":false,"purchaseUrl":null,"sourceUrl":null,"report":{"provenance":"trusted-source-unreviewed","screen":{"ran":true,"outcome":"clean","suspicious":0,"notes":0,"hiddenCharacters":false},"virusScan":{"engine":"clamav","status":"clean","scannedAt":"2026-08-12T22:24:14.397643Z","sha256":"18529818387B6374919F769C03F627BFD25F0E9700D5B9E69158D3535B5306A4","sizeBytes":1413},"review":null,"source":{"repositoryUrl":"https://github.com/spencerpauly/awesome-cursor-skills","path":"resources/fixing-broken-links","license":"CC0-1.0","commit":"99cd2655788456cc1c685944dcf8c2de82c1ded4","subtreeSha":"33302B1B81F86E3259D3565664756B7F8E76AF865C595F67B6E640DB0FA60314","lastSyncedAt":"2026-09-25T06:49:08.872487Z"},"reviewedAt":"2026-08-12T22:25:41.694554Z","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow."},"install":[{"target":"skills-cli","command":"npx skills add https://github.com/spencerpauly/awesome-cursor-skills/tree/main/resources/fixing-broken-links"},{"target":"claude-code","command":"claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install spencerpauly-awesome-cursor-skills@llmmart"},{"target":"git","command":"git clone https://github.com/spencerpauly/awesome-cursor-skills.git"}]}