npx claudepluginhub huifer/adsense-readiness-benchmark --plugin arbThis skill uses the workspace's default tool permissions.
Comprehensive detection of black-hat SEO techniques and spam indicators. Protects against policy violations and search penalties.
Suggests manual /compact at logical task boundaries in long Claude Code sessions and multi-phase tasks to avoid arbitrary auto-compaction losses.
Share bugs, ideas, or general feedback.
Comprehensive detection of black-hat SEO techniques and spam indicators. Protects against policy violations and search penalties.
Audit for SEO spam:
Input: Website URL or source files Output: Spam detection report + risk assessment Time: 20-40 minutes
This skill is the main Search Integrity contributor and should align to the benchmark scope explicitly:
Core 79: required coverage is SI01-SI12Core 79 + Profile: required coverage is SI01-SI12 plus any SI extension items selected by profile or trigger rulesFull 105: cover SI01-SI16Structured results should declare:
score_modecovered_itemsselected_profile_items limited to SI itemstriggered_extension_items limited to SI itemsmanual_review_required when evidence is directional but not conclusiveIf this skill finds issues in SI13-SI16 while running Core 79, mark them as extension_findings so the aggregator can decide whether to widen scope.
Loading page with keywords unnaturally to improve rankings.
Examples:
Good Density (~1-2% of words):
Bad Density (>5%):
Manual Check:
Automated Check:
function checkKeywordDensity(text, keyword) {
const words = text.toLowerCase().split(/\s+/);
const keywordCount = words.filter(
word => word.includes(keyword.toLowerCase())
).length;
const density = (keywordCount / words.length) * 100;
// Red flags
if (density > 5) return { spam: true, reason: 'High keyword density' };
if (density > 3 && !naturalLanguage(text)) return { spam: true, reason: 'Forced keywords' };
return { spam: false };
}
Tools:
Method 1: White Text on White Background
<div style="color: #fff; background: #fff;">
keyword keyword keyword
</div>
Method 2: Font Size 0
<div style="font-size: 0;">keyword spam</div>
Method 3: Off-Page Positioning
.spam {
position: absolute;
left: -9999px; /* Off-screen */
}
Method 4: Comments or Metadata
<!-- hidden keyword spam -->
<meta name="hidden" content="keyword spam">
Visual Check:
Code Check:
# Find suspicious CSS
grep -r "color: #fff" *.html
grep -r "font-size: 0" *.html
grep -r "left: -999" *.css
grep -r "display: none" *.css # If non-accessible
Automated Check:
function findHiddenText(element) {
const style = window.getComputedStyle(element);
const issues = [];
// Check visibility
if (style.display === 'none') issues.push('Hidden with display:none');
if (style.visibility === 'hidden') issues.push('Hidden with visibility:hidden');
if (style.opacity === '0') issues.push('Hidden with opacity:0');
// Check positioning
const left = parseInt(style.left);
if (left < -100) issues.push('Off-screen text');
// Check color contrast
const color = style.color;
const bg = style.backgroundColor;
if (contrast(color, bg) < 1) issues.push('No contrast (hidden)');
return issues;
}
Showing different content to users vs. search engines.
Example:
Check User-Agent:
Tools:
Manual Check:
# Check as user
curl -H "User-Agent: Mozilla/5.0" https://example.com/page
# Check as Googlebot
curl -H "User-Agent: Mozilla/5.0 (compatible; Googlebot/2.1)" https://example.com/page
# Compare output (should be identical)
diff user-agent-response.html googlebot-response.html
Low-Quality Link Farms:
Unnatural Patterns:
Step 1: Get Backlinks
# Using SEMrush, Moz, Ahrefs, or similar:
# Export all backlinks to CSV
Step 2: Categorize
✅ Quality backlinks:
- News sites
- Industry publications
- Educational institutions
- High authority domains (DA >40)
- Natural, varied anchor text
⚠️ Questionable backlinks:
- Blogs that accept any content
- PBN indicators
- Exact match keywords 30-50%
- Recent bulk additions
❌ Spam backlinks:
- Obvious PBN (similar design/content)
- Exact match keywords 70%+
- Link farms
- Adult/gambling/pharmaceutical
- Automated comments
Step 3: Analyze Patterns
function analyzeBacklinks(links) {
let spam_score = 0;
// Check anchor text ratio
const exactMatch = links.filter(l =>
l.anchor === targetKeyword
).length;
if (exactMatch / links.length > 0.5) spam_score += 30;
// Check domain authority
const lowDA = links.filter(l => l.domainAuthority < 20).length;
if (lowDA / links.length > 0.7) spam_score += 20;
// Check diversity
const uniqueDomains = new Set(links.map(l => l.domain)).size;
if (uniqueDomains / links.length < 0.8) spam_score += 15;
return spam_score;
}
If you find spam links:
# Create disavow file
disavow.txt:
domain spam-site-1.com
domain spam-site-2.com
url https://bad-site.com/link-to-me
# Submit to Google Search Console
Spam Comment Indicators:
WordPress:
Custom Systems:
function isSpamComment(comment) {
const spam_score = 0;
// Generic praise
if (/great post|nice article|thanks for sharing/.test(comment.text))
spam_score += 20;
// Links in comment
if (comment.text.includes('http')) spam_score += 30;
// Very short comment
if (comment.text.length < 20) spam_score += 15;
// All caps
if (comment.text === comment.text.toUpperCase()) spam_score += 15;
return spam_score > 50;
}
Content:
Technical:
Links:
Comments:
# SEO Spam Detection Report
## Keyword Stuffing
- Pages analyzed: 150
- Keyword density average: 1.8%
- High density (>5%): 0 pages
- Suspicious patterns: 0
- Status: ✅ CLEAN
## Hidden Text/Links
- Pages scanned: 150
- Hidden text found: 0
- Off-screen content: 0
- Hidden links: 0
- Status: ✅ CLEAN
## Cloaking
- User-agent test: PASSED
- Content identical for all: ✅
- Googlebot sees same: ✅
- Status: ✅ CLEAN
## Backlink Analysis
- Total backlinks: 45
- Quality backlinks: 40 (89%)
- Questionable: 5 (11%)
- Spam backlinks: 0 (0%)
- Spam score: LOW
### Action Items
- Review 5 questionable links
- Disavow any confirmed spam
## Comment Spam
- Total comments: 320
- Spam detected: 3 (1%)
- Status: ✅ MINIMAL
## Overall Risk
- Risk level: LOW
- Recommendations: Monitor backlinks quarterly
Built-In Options:
Professional Tools:
Related Skills:
policy-risk-scannerads-readiness-assessmentactive-compliance-monitor