asgard-ai-platform/algo-seo-pagerank
Implement PageRank algorithm to compute web page importance scores using the random surfer model. Use this skill when the user needs to rank pages by link authority, build a simplified search ranking system, or understand how link structure determines page importance — even if they say 'which pages are most important', 'link analysis', or 'page authority score'.
npx skills add https://github.com/asgard-ai-platform/skills --skill algo-seo-pagerank
PageRank computes the importance of web pages by modeling a random surfer who follows links with probability d (damping factor) and jumps to a random page with probability 1-d. Converges in O(k * E) where k is iterations and E is number of edges.
Trigger conditions:
When NOT to use:
IRON LAW: PageRank Convergence
- Damping factor d MUST be < 1 (typically 0.85)
- Without damping, rank sinks and spider traps break convergence
- Correctness invariant: sum of all PageRank values = 1.0
Build adjacency list from link data. Verify: no self-loops counted, all nodes accounted for (including dangling nodes with no outlinks).
Gate: Graph is well-formed, dangling nodes identified.
Check: all PR values sum to ~1.0. Compare top-k rankings against known authority pages.
Gate: |Σ PR - 1.0| < 0.001 and convergence achieved within max iterations.
Return sorted page scores with rank position.
{
"rankings": [{"page": "url", "score": 0.042, "rank": 1}],
"metadata": {"nodes": 1000, "edges": 5000, "iterations": 45, "damping": 0.85, "converged": true}
}
Input: Pages A→B, A→C, B→C, C→A (3 nodes, 4 edges, d=0.85)
Expected Output: C: 0.390, A: 0.327, B: 0.283 (approximate)
| Input | Expected | Why |
|-------|----------|-----|
| Single node, no links | PR = 1.0 | Only node gets all rank |
| All nodes link to one | Target gets highest PR | Star topology concentrates rank |
| Dangling node (no outlinks) | Distribute its rank equally | Prevents rank leakage |
references/convergence-proof.mdreferences/sparse-implementation.mdTake asgard-ai-platform/algo-seo-pagerank from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.