Major refactoring of ourdigital-custom-skills with new numbering system: ## Structure Changes - Each skill now has code/ (Claude Code) and desktop/ (Claude Desktop) versions - New progressive numbering: 01-09 General, 10-19 SEO, 20-29 GTM, 30-39 OurDigital, 40-49 Jamie ## Skill Reorganization - 01-notion-organizer (from 02) - 10-18: SEO tools split into focused skills (technical, on-page, local, schema, vitals, gsc, gateway) - 20-21: GTM audit and manager - 30-32: OurDigital designer, research, presentation - 40-41: Jamie brand editor and audit ## New Files - .claude/commands/: Slash command definitions for all skills - CLAUDE.md: Updated with new skill structure documentation - REFACTORING_PLAN.md: Migration documentation - COMPATIBILITY_REPORT.md, SKILLS_COMPARISON.md: Analysis docs ## Removed - Old skill directories (02-05, 10-14, 20-21 old numbering) - Consolidated into new structure with _archive/ for reference 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
495 lines
11 KiB
Markdown
495 lines
11 KiB
Markdown
# OurDigital SEO Audit - User Guide
|
|
|
|
## Table of Contents
|
|
|
|
1. [Overview](#overview)
|
|
2. [Prerequisites](#prerequisites)
|
|
3. [Quick Start](#quick-start)
|
|
4. [Features](#features)
|
|
5. [Usage Examples](#usage-examples)
|
|
6. [API Reference](#api-reference)
|
|
7. [Notion Integration](#notion-integration)
|
|
8. [Troubleshooting](#troubleshooting)
|
|
|
|
---
|
|
|
|
## Overview
|
|
|
|
The **ourdigital-seo-audit** skill is a comprehensive SEO audit tool for Claude Code that:
|
|
|
|
- Performs technical SEO analysis
|
|
- Validates schema markup (JSON-LD, Microdata, RDFa)
|
|
- Checks sitemap and robots.txt configuration
|
|
- Measures Core Web Vitals performance
|
|
- Integrates with Google APIs (Search Console, Analytics, PageSpeed)
|
|
- Exports findings to Notion database
|
|
|
|
### Supported Audit Categories
|
|
|
|
| Category | Description |
|
|
|----------|-------------|
|
|
| Technical SEO | HTTPS, canonicals, redirects, crawlability |
|
|
| On-page SEO | Meta tags, headings, images, internal links |
|
|
| Content | Quality, duplication, freshness, E-E-A-T |
|
|
| Local SEO | NAP consistency, citations, LocalBusiness schema |
|
|
| Performance | Core Web Vitals (LCP, CLS, TBT, FCP) |
|
|
| Schema/Structured Data | JSON-LD validation, rich results eligibility |
|
|
| Sitemap | XML validation, URL accessibility |
|
|
| Robots.txt | Directive analysis, blocking issues |
|
|
|
|
---
|
|
|
|
## Prerequisites
|
|
|
|
### 1. Python Environment
|
|
|
|
```bash
|
|
# Install required packages
|
|
cd ~/.claude/skills/ourdigital-seo-audit/scripts
|
|
pip install -r requirements.txt
|
|
```
|
|
|
|
### 2. Google Cloud Service Account
|
|
|
|
The skill uses a service account for authenticated APIs:
|
|
|
|
```
|
|
File: ~/.credential/ourdigital-seo-agent.json
|
|
Service Account: ourdigital-seo-agent@ourdigital-insights.iam.gserviceaccount.com
|
|
Project: ourdigital-insights
|
|
```
|
|
|
|
**Required permissions:**
|
|
- Search Console: Add service account email as user in [Search Console](https://search.google.com/search-console)
|
|
- GA4: Add service account as Viewer in [Google Analytics](https://analytics.google.com)
|
|
|
|
### 3. API Keys
|
|
|
|
Located in `~/Workspaces/claude-workspace/.env`:
|
|
|
|
```bash
|
|
# Google API Key (for PageSpeed, Custom Search, Knowledge Graph)
|
|
GOOGLE_API_KEY=your-api-key
|
|
PAGESPEED_API_KEY=your-api-key
|
|
CUSTOM_SEARCH_API_KEY=your-api-key
|
|
CUSTOM_SEARCH_ENGINE_ID=your-cx-id
|
|
```
|
|
|
|
### 4. Enabled Google Cloud APIs
|
|
|
|
Enable these APIs in [Google Cloud Console](https://console.cloud.google.com/apis/library):
|
|
|
|
- Search Console API
|
|
- PageSpeed Insights API
|
|
- Google Analytics Admin API
|
|
- Google Analytics Data API
|
|
- Custom Search API
|
|
- Knowledge Graph Search API
|
|
|
|
---
|
|
|
|
## Quick Start
|
|
|
|
### Run a Full SEO Audit
|
|
|
|
```
|
|
Perform a comprehensive SEO audit for https://example.com
|
|
```
|
|
|
|
### Check Core Web Vitals
|
|
|
|
```
|
|
Check Core Web Vitals for https://example.com
|
|
```
|
|
|
|
### Validate Schema Markup
|
|
|
|
```
|
|
Validate schema markup on https://example.com
|
|
```
|
|
|
|
### Check Sitemap
|
|
|
|
```
|
|
Validate the sitemap at https://example.com/sitemap.xml
|
|
```
|
|
|
|
### Analyze Robots.txt
|
|
|
|
```
|
|
Analyze robots.txt for example.com
|
|
```
|
|
|
|
---
|
|
|
|
## Features
|
|
|
|
### 1. Technical SEO Analysis
|
|
|
|
Checks for:
|
|
- HTTPS/SSL implementation
|
|
- Canonical URL configuration
|
|
- Redirect chains and loops
|
|
- 404 error pages
|
|
- Mobile-friendliness
|
|
- Hreflang tags (international sites)
|
|
|
|
**Command:**
|
|
```
|
|
Check technical SEO for https://example.com
|
|
```
|
|
|
|
### 2. Schema Markup Validation
|
|
|
|
Extracts and validates structured data:
|
|
- JSON-LD (recommended)
|
|
- Microdata
|
|
- RDFa
|
|
|
|
Supported schema types:
|
|
- Organization / LocalBusiness
|
|
- Product / Offer
|
|
- Article / BlogPosting
|
|
- FAQPage / HowTo
|
|
- BreadcrumbList
|
|
- WebSite / WebPage
|
|
|
|
**Command:**
|
|
```
|
|
Validate existing schema markup on https://example.com
|
|
```
|
|
|
|
### 3. Schema Generation
|
|
|
|
Generate JSON-LD markup for your pages:
|
|
|
|
**Command:**
|
|
```
|
|
Generate Organization schema for https://example.com
|
|
```
|
|
|
|
**Available types:**
|
|
- `organization` - Company/organization info
|
|
- `local_business` - Physical business location
|
|
- `product` - E-commerce products
|
|
- `article` - Blog posts and news
|
|
- `faq` - FAQ pages
|
|
- `breadcrumb` - Navigation breadcrumbs
|
|
- `website` - Site-level schema with search
|
|
|
|
### 4. Sitemap Validation
|
|
|
|
Validates XML sitemaps for:
|
|
- XML syntax errors
|
|
- URL accessibility (HTTP status)
|
|
- URL count limits (50,000 max)
|
|
- File size limits (50MB max)
|
|
- Lastmod date validity
|
|
- Index sitemap structure
|
|
|
|
**Command:**
|
|
```
|
|
Validate the sitemap at https://example.com/sitemap.xml
|
|
```
|
|
|
|
### 5. Robots.txt Analysis
|
|
|
|
Analyzes robots.txt for:
|
|
- Syntax validation
|
|
- User-agent rules
|
|
- Disallow/Allow patterns
|
|
- Sitemap declarations
|
|
- Critical resource blocking
|
|
- URL testing against rules
|
|
|
|
**Command:**
|
|
```
|
|
Analyze robots.txt for example.com
|
|
```
|
|
|
|
### 6. Core Web Vitals
|
|
|
|
Measures performance metrics:
|
|
|
|
| Metric | Good | Needs Improvement | Poor |
|
|
|--------|------|-------------------|------|
|
|
| LCP (Largest Contentful Paint) | < 2.5s | 2.5s - 4.0s | > 4.0s |
|
|
| CLS (Cumulative Layout Shift) | < 0.1 | 0.1 - 0.25 | > 0.25 |
|
|
| TBT (Total Blocking Time) | < 200ms | 200ms - 600ms | > 600ms |
|
|
| FCP (First Contentful Paint) | < 1.8s | 1.8s - 3.0s | > 3.0s |
|
|
|
|
**Command:**
|
|
```
|
|
Check Core Web Vitals for https://example.com
|
|
```
|
|
|
|
### 7. Search Console Integration
|
|
|
|
Access search performance data:
|
|
- Top queries and pages
|
|
- Click-through rates
|
|
- Average positions
|
|
- Indexing status
|
|
|
|
**Command:**
|
|
```
|
|
Get Search Console data for sc-domain:example.com
|
|
```
|
|
|
|
### 8. GA4 Analytics Integration
|
|
|
|
Access traffic and behavior data:
|
|
- Page views
|
|
- User sessions
|
|
- Traffic sources
|
|
- Engagement metrics
|
|
|
|
**Available properties:**
|
|
- OurDigital Lab (218477407)
|
|
- OurDigital Journal (413643875)
|
|
- OurDigital Blog (489750460)
|
|
|
|
**Command:**
|
|
```
|
|
Get GA4 traffic data for OurDigital Blog
|
|
```
|
|
|
|
---
|
|
|
|
## Usage Examples
|
|
|
|
### Example 1: Full Site Audit with Notion Export
|
|
|
|
```
|
|
Perform a comprehensive SEO audit for https://blog.ourdigital.org and export findings to Notion
|
|
```
|
|
|
|
This will:
|
|
1. Check robots.txt configuration
|
|
2. Validate sitemap
|
|
3. Analyze schema markup
|
|
4. Run PageSpeed analysis
|
|
5. Export all findings to the OurDigital SEO Audit Log database
|
|
|
|
### Example 2: Schema Audit Only
|
|
|
|
```
|
|
Check schema markup on https://blog.ourdigital.org and identify any issues
|
|
```
|
|
|
|
### Example 3: Performance Deep Dive
|
|
|
|
```
|
|
Analyze Core Web Vitals for https://blog.ourdigital.org and provide optimization recommendations
|
|
```
|
|
|
|
### Example 4: Competitive Analysis
|
|
|
|
```
|
|
Compare SEO performance between https://blog.ourdigital.org and https://competitor.com
|
|
```
|
|
|
|
### Example 5: Local SEO Audit
|
|
|
|
```
|
|
Perform local SEO audit for OurDigital in Seoul, Korea
|
|
```
|
|
|
|
---
|
|
|
|
## API Reference
|
|
|
|
### Python Scripts
|
|
|
|
All scripts are located in `~/.claude/skills/ourdigital-seo-audit/scripts/`
|
|
|
|
#### robots_checker.py
|
|
|
|
```bash
|
|
python robots_checker.py --url https://example.com
|
|
```
|
|
|
|
Options:
|
|
- `--url` - Base URL to check
|
|
- `--test-url` - Specific URL to test against rules
|
|
- `--user-agent` - User agent to test (default: Googlebot)
|
|
|
|
#### sitemap_validator.py
|
|
|
|
```bash
|
|
python sitemap_validator.py --url https://example.com/sitemap.xml
|
|
```
|
|
|
|
Options:
|
|
- `--url` - Sitemap URL
|
|
- `--check-urls` - Verify URL accessibility (slower)
|
|
- `--limit` - Max URLs to check
|
|
|
|
#### schema_validator.py
|
|
|
|
```bash
|
|
python schema_validator.py --url https://example.com
|
|
```
|
|
|
|
Options:
|
|
- `--url` - Page URL to validate
|
|
- `--check-rich-results` - Check Google Rich Results eligibility
|
|
|
|
#### schema_generator.py
|
|
|
|
```bash
|
|
python schema_generator.py --type organization --url https://example.com
|
|
```
|
|
|
|
Options:
|
|
- `--type` - Schema type (organization, local_business, product, article, faq, breadcrumb, website)
|
|
- `--url` - Target URL
|
|
- `--output` - Output file (default: stdout)
|
|
|
|
#### pagespeed_client.py
|
|
|
|
```bash
|
|
python pagespeed_client.py --url https://example.com --strategy mobile
|
|
```
|
|
|
|
Options:
|
|
- `--url` - URL to analyze
|
|
- `--strategy` - mobile, desktop, or both
|
|
- `--json` - Output as JSON
|
|
- `--cwv-only` - Show only Core Web Vitals
|
|
|
|
#### gsc_client.py
|
|
|
|
```bash
|
|
python gsc_client.py --site sc-domain:example.com --action summary
|
|
```
|
|
|
|
Options:
|
|
- `--site` - Site URL (sc-domain: or https://)
|
|
- `--action` - summary, queries, pages, sitemaps, inspect
|
|
- `--days` - Days of data (default: 30)
|
|
|
|
#### full_audit.py
|
|
|
|
```bash
|
|
python full_audit.py --url https://example.com --output notion
|
|
```
|
|
|
|
Options:
|
|
- `--url` - URL to audit
|
|
- `--output` - console, notion, or json
|
|
- `--no-robots` - Skip robots.txt check
|
|
- `--no-sitemap` - Skip sitemap validation
|
|
- `--no-schema` - Skip schema validation
|
|
- `--no-performance` - Skip PageSpeed analysis
|
|
|
|
---
|
|
|
|
## Notion Integration
|
|
|
|
### Default Database
|
|
|
|
All findings are stored in the **OurDigital SEO Audit Log**:
|
|
|
|
- **Database ID**: `2c8581e5-8a1e-8035-880b-e38cefc2f3ef`
|
|
- **URL**: https://www.notion.so/dintelligence/2c8581e58a1e8035880be38cefc2f3ef
|
|
|
|
### Database Properties
|
|
|
|
| Property | Type | Description |
|
|
|----------|------|-------------|
|
|
| Issue | Title | Issue title |
|
|
| Site | URL | Audited site URL |
|
|
| Category | Select | Issue category |
|
|
| Priority | Select | Critical / High / Medium / Low |
|
|
| Status | Status | Not started / In progress / Done |
|
|
| URL | URL | Specific page with issue |
|
|
| Found Date | Date | Discovery date |
|
|
| Audit ID | Text | Groups findings by session |
|
|
|
|
### Page Content Template
|
|
|
|
Each finding page contains:
|
|
|
|
```
|
|
## Description
|
|
[Detailed explanation of the issue]
|
|
|
|
## Impact
|
|
⚠️ [Business/ranking impact]
|
|
|
|
## Recommendation
|
|
💡 [Actionable solution]
|
|
```
|
|
|
|
### Filtering Findings
|
|
|
|
Use Notion filters to view:
|
|
- **By Site**: Filter by Site property
|
|
- **By Category**: Filter by Category (Schema, Performance, etc.)
|
|
- **By Priority**: Filter by Priority (Critical first)
|
|
- **By Audit**: Filter by Audit ID to see all findings from one session
|
|
|
|
---
|
|
|
|
## Troubleshooting
|
|
|
|
### API Authentication Errors
|
|
|
|
**Error: "Invalid JWT Signature"**
|
|
- Check that the service account key file exists
|
|
- Verify the file path in `~/.credential/ourdigital-seo-agent.json`
|
|
- Regenerate the key in Google Cloud Console if corrupted
|
|
|
|
**Error: "Requests from referer are blocked"**
|
|
- Go to [API Credentials](https://console.cloud.google.com/apis/credentials)
|
|
- Click on your API key
|
|
- Set "Application restrictions" to "None"
|
|
- Save and wait 1-2 minutes
|
|
|
|
**Error: "API has not been enabled"**
|
|
- Enable the required API in [Google Cloud Console](https://console.cloud.google.com/apis/library)
|
|
- Wait a few minutes for propagation
|
|
|
|
### Search Console Issues
|
|
|
|
**Error: "Site not found"**
|
|
- Use domain property format: `sc-domain:example.com`
|
|
- Or URL prefix format: `https://www.example.com/`
|
|
- Add service account email as user in Search Console
|
|
|
|
### PageSpeed Rate Limiting
|
|
|
|
**Error: "429 Too Many Requests"**
|
|
- Wait a few minutes before retrying
|
|
- Use an API key for higher quotas
|
|
- Batch requests with delays
|
|
|
|
### Notion Integration Issues
|
|
|
|
**Error: "Failed to create page"**
|
|
- Verify NOTION_API_KEY is set
|
|
- Check that the integration has access to the database
|
|
- Ensure database properties match expected schema
|
|
|
|
### Python Import Errors
|
|
|
|
**Error: "ModuleNotFoundError"**
|
|
```bash
|
|
cd ~/.claude/skills/ourdigital-seo-audit/scripts
|
|
pip install -r requirements.txt
|
|
```
|
|
|
|
---
|
|
|
|
## Support
|
|
|
|
For issues or feature requests:
|
|
1. Check this guide first
|
|
2. Review the [SKILL.md](SKILL.md) for technical details
|
|
3. Check [examples.md](examples.md) for more usage examples
|
|
|
|
---
|
|
|
|
*Last updated: December 2024*
|