ai-citations-tracker
Use when you need to **measure** (not just describe) brand citation frequency across AI search surfaces over time. Runs a…
Use when setting up automated weekly PageSpeed Insights tracking for a set of URLs — to catch performance regressions before users notice, or to validate that performance optimizations actually stuck over time. Triggers from "weekly PSI tracking", "PageSpeed monitoring", "Core
Claude Code
$ npx -y skills add maxschottke-spec/seo-survival-kit --skill psi-weekly-cron-baseline --agent claude-code
Codex
$ npx skills add maxschottke-spec/seo-survival-kit --skill psi-weekly-cron-baseline -a codex -y
Cursor
$ npx skills add maxschottke-spec/seo-survival-kit --skill psi-weekly-cron-baseline -a cursor -y
Gemini CLI
$ npx skills add maxschottke-spec/seo-survival-kit --skill psi-weekly-cron-baseline -a gemini-cli -y
GitHub Copilot
$ npx skills add maxschottke-spec/seo-survival-kit --skill psi-weekly-cron-baseline -a github-copilot -y
OpenCode
$ npx skills add maxschottke-spec/seo-survival-kit --skill psi-weekly-cron-baseline -a opencode -y
Windsurf
$ npx skills add maxschottke-spec/seo-survival-kit --skill psi-weekly-cron-baseline -a windsurf -y
name: psi-weekly-cron-baseline description: 'Use when setting up automated weekly PageSpeed Insights tracking for a set of URLs — to catch performance regressions before users notice, or to validate that performance optimizations actually stuck over time. Triggers from "weekly PSI tracking", "PageSpeed monitoring", "Core Web Vitals over time", "PSI cron", "performance drift detection", "set up automated lighthouse runs". Uses the free Google PSI v5 API (25k calls/day quota with API key). Stores historical data as NDJSON for trend analysis and triggers alerts on regressions.' user-invocable: true argument-hint: '[setup | run | analyze]' allowed-tools: [Read, Write, Bash(node:*), Bash(curl:*), Bash(launchctl:*), Bash(crontab:*)] license: MIT metadata: author: Max Schottke version: '0.5.4' category: marketing
Automates Google PageSpeed Insights v5 tracking for a configurable list of URLs. Runs on a cron schedule (launchd on macOS, systemd timers on Linux, or GitHub Actions for cloud-ready setup). Stores each run as a row in an NDJSON file for easy historical analysis. Optional regression detection compares current run to N-week average and alerts when scores drop > threshold.
**Why:** PSI single-shot tells you the current state. PSI over time tells you whether your optimizations stuck — and catches regressions from theme updates, plugin installs, or third-party-script bloat before customers notice.
**Don't use for:**
digraph arch {
"Where does the cron run?" [shape=diamond];
"launchd (macOS)" [shape=box,fillcolor=lightgreen,style=filled];
"systemd (Linux)" [shape=box,fillcolor=lightgreen,style=filled];
"GitHub Actions (cloud)" [shape=box,fillcolor=lightblue,style=filled];
"AWS Lambda + EventBridge" [shape=box,fillcolor=lightyellow,style=filled];
"Where does the cron run?" -> "launchd (macOS)" [label="dev machine, simple"];
"Where does the cron run?" -> "systemd (Linux)" [label="server, simple"];
"Where does the cron run?" -> "GitHub Actions (cloud)" [label="prod, team-shared, auditable"];
"Where does the cron run?" -> "AWS Lambda + EventBridge" [label="needs HA + alerting"];
}Recommendation: start with **launchd** locally to validate. Migrate to **GitHub Actions** for team-shared / production use. AWS Lambda only if you need true 24/7 reliability beyond your local machine's uptime.
Create `psi-config.json`:
{
"api_key": "YOUR_GOOGLE_API_KEY",
"strategies": ["mobile", "desktop"],
"categories": ["performance", "seo", "accessibility", "best-practices"],
"urls": [
{ "label": "homepage", "url": "https://example.com/" },
{ "label": "main-category", "url": "https://example.com/products/" },
{ "label": "top-product", "url": "https://example.com/products/bestseller/" },
{ "label": "checkout", "url": "https://example.com/checkout/" }
],
"output_dir": "./psi-history",
"alert_threshold_drop": 10,
"alert_baseline_weeks": 4
}URL count: keep at 5–20 critical URLs. PSI v5 free quota is 25,000 calls/day — way more than needed for weekly runs.
1. Visit [console.cloud.google.com](https://console.cloud.google.com/) 2. Create or pick a project 3. Library → enable "PageSpeed Insights API" 4. Credentials → Create credentials → API key 5. (Recommended) Restrict key to "PageSpeed Insights API" only
**macOS launchd** (recommended for dev):
`~/Library/LaunchAgents/com.you.psi-weekly.plist`:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key><string>com.you.psi-weekly</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/node</string>
<string>/path/to/psi-fetch.example.js</string>
</array>
<key>StartCalendarInterval</key>
<dict>
<key>Weekday</key><integer>1</integer>
<key>Hour</key><integer>4</integer>
<key>Minute</key><integer>0</integer>
</dict>
<key>StandardOutPath</key><string>/tmp/psi-weekly.log</string>
<key>StandardErrorPath</key><string>/tmp/psi-weekly.err</string>
</dict>
</plist>Load it: `launchctl load ~/Library/LaunchAgents/com.you.psi-weekly.plist`
**GitHub Actions** (recommended for team/prod):
`.github/workflows/psi-weekly.yml`:
name: PSI Weekly Baseline
on:
schedule:
- cron: '0 4 * * 1' # Monday 4 AM UTC
workflow_dispatch: # manual trigger
jobs:
psi:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with: { node-version: 20 }
- name: Run PSI fetch
env:
GOOGLE_API_KEY: ${{ secrets.GOOGLE_API_KEY }}
run: node ./psi-fetch.example.js
- name: Commit history
run: |
git config user.name 'psi-bot'
git config user.email 'bot@noreply.example.com'
git add psi-history/
git diff --cached --quiet || git commit -m "psi: weekly baseline $(date +%Y-%m-%d)"
git pushSee `psi-fetch.example.js` in this skill folder. It: 1. Reads config 2. Calls PSI v5 for each URL × strategy 3. Extracts key metrics (Performance, SEO, A11y, Best Practices, LCP, CLS, INP, TBT, TTFB, CrUX category) 4. Appends one NDJSON row per call to `<
Recovery-first decision support for ecommerce/D2C SEO. Claude Code skills for Core Update recovery diagnosis, prioritized action plans, weekly monitoring, and a Change Governor / Settlement Gate that prevents over-optimizing during recovery windows.
Use when you need to **measure** (not just describe) brand citation frequency across AI search surfaces over time. Runs a…
Use when a site has lost visibility in AI search surfaces (Google AI Overviews, Google AI Mode, ChatGPT citations, Perplexity…
Use when an e-commerce business sells across multiple channels (own shop, Amazon, OTTO, eBay, Etsy, Zalando, etc.) and wants to…
Use when an e-commerce or content site wants to deeply understand WHO their organic competitors are (often surprising — not the…
Use when the user wants Google Search Console data pulled directly into the session instead of manually screenshotting /…
Use when a website experienced a sudden visibility/ranking drop that correlates with a published Google Core Update — symptoms…
When the user wants to plan, design, or implement an A/B test or experiment, or build a growth experimentation program. Also use…
Comprehensive SEO analysis for any website or business type. Full site audits, single-page analysis, technical SEO (crawlability,…
Turn the current project website into a short, polished, shareable launch video using Hyperframes. Use when someone says "/brag",…
Full website GEO+SEO audit with parallel subagent delegation. Orchestrates a comprehensive Generative Engine Optimization audit…