协作头脑风暴
brainstorming
在实现前澄清需求、探索设计选择,并形成清晰的开发方向。
link-rot-scanner【开发与工程】Crawl and validate all internal and external links across an AEM Edge Delivery Services site. Uses the query index or sitemap to discover pages, extracts links from .plain.html renditions, checks HTTP status codes, and produces a prioritized report of broken, redirecting, and insecure links. Use when auditing link health before launch, after a migrat…
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
Discover all pages on an AEM Edge Delivery Services site using the query index or sitemap, extract every link from each page's .plain.html rendition, validate each link's HTTP status, and produce a prioritized report of broken, redirecting, and insecure links with suggested fixes.
When fetching or analyzing external URLs:
Before starting, create a TodoList to track progress through each step:
.plain.html and extract all linksAsk the user for the site's base URL (e.g., https://www.example.com).
Attempt to discover all pages in this order:
Query index (preferred)
Fetch {base-url}/query-index.json. Each entry includes path, title, description, lastModified, and image. Extract the path field from each entry. If the response is paginated (look for offset and limit or total), fetch all pages by following the pagination.
Sitemap fallback
If the query index is not available (404 or empty), fetch {base-url}/sitemap.xml and parse the <loc> elements.
Manual page list If neither source is available, ask the user for a list of page URLs, one per line.
For large sites (over 100 pages), inform the user and process pages in batches of 10-20.
For each page, fetch its .plain.html rendition (e.g., /about becomes /about.plain.html; root / becomes /index.plain.html).
Extract all <a href="..."> elements and record:
Classify each link as: Internal (same domain), External (different domain), Anchor (fragment-only like #section), or Non-HTTP (mailto:, tel:, javascript:).
Deduplicate URLs first — if the same URL appears on 50 pages, check it once.
For each unique internal URL, make an HTTP GET request. Check both the path and the path with a trailing slash (EDS may serve content at either). For fragment links, verify the target id exists in the .plain.html.
For each unique external URL, send an HTTP HEAD request. Fall back to GET if HEAD returns 405. Example using WebFetch:
# Check a single external link — HEAD first, GET fallback
response = fetch(url, method="HEAD", timeout=15000,
headers={"User-Agent": "EDS-LinkCheck/1.0"})
if response.status == 405:
response = fetch(url, method="GET", timeout=15000,
headers={"User-Agent": "EDS-LinkCheck/1.0"})
Wait 500ms between requests to the same external domain. Flag 403/5xx/timeout responses as "unable to verify" rather than "broken" since bot detection may cause false negatives.
Group all non-200 links by priority (see references/link-validation-details.md for full definitions):
| Priority | Category |
|---|---|
| P0 | Broken internal links (404) — always highest priority |
| P1 | Broken external links (404) |
| P2 | Redirecting links (301/302) — update to final destination |
| P3 | Insecure links (HTTP instead of HTTPS) |
| P4 | Unable to verify (403/5xx/timeout) |
| Info | Anchor issues (missing fragment target) |
| Priority | Category | Count |
|---|---|---|
| P0 | Broken internal links | X |
| P1 | Broken external links | Y |
| P2 | Redirecting links | Z |
| P3 | Insecure links (HTTP) | A |
| P4 | Unable to verify | B |
| Info | Anchor issues | C |
| -- | Valid links (200) | D |
| Total | N |
For each page with at least one non-200 link:
Page: /path/to/page
| Priority | Link URL | Anchor Text | Status | Suggested Fix |
|---|---|---|---|---|
| P0 | /old-page | "Learn more" | 404 | Update to /new-page or remove link |
| P2 | /about | "About us" | 301 -> /about-us | Update link to /about-us |
| P3 | http://example.com | "Example" | 200 (HTTP) | Change to https://example.com |
For broken internal links:
For fix instructions authors can follow in their authoring tool, see references/link-validation-details.md.