Answer Engine Citation Tracker
The new SEO is being cited by AI. Track whether Perplexity, ChatGPT, Gemini, and others link to your pages.
Track Your URL
Where to Check
Enter a URL and query above, then click generate to get direct links to test Perplexity, ChatGPT, Gemini, and Bing Copilot.
Weekly Citation Log
| Engine | Status | Last checked | Notes |
|---|---|---|---|
| Perplexity | — | Search query + inspect Sources | |
| ChatGPT / GPT-4o | — | Browse with Bing may cite sources | |
| Gemini / Google SGE | — | Check AI Overview links | |
| Microsoft Copilot | — | Look for Learn more links | |
| Claude | — | No web citations yet | |
| Perplexity Pages | — | Persistent topic pages with sources |
How to increase citations
- Answer first: Put the direct answer in the first paragraph, then explain.
- Schema.org: Use FAQPage, HowTo, and ItemList structured data.
- Unique data: Original benchmarks, calculators, and comparisons get cited more.
- Keep URLs stable: Changing slugs breaks citations.
Automated monitoring
For now, manual checks are the most reliable. We are building a scheduled scanner that will:
- Run weekly Perplexity queries against your target list.
- Screenshot and log citations in your Obsidian vault.
- Alert you when new citations appear or disappear.
⚡ Use in Hermes Agent
✓ Hermes-readyDownload the Hermes Agent Python script for "Answer Engine Citation Tracker". Drop it into your Hermes tools folder or register it with the Hermes registry so other agents can call it directly.
Quick install
# Option 1: download and place in Hermes tools folder
curl -O https://hermesdispatch.dev/hermes-tools/answer_engine_citation_tracker.py
mv $(basename https://hermesdispatch.dev/hermes-tools/answer_engine_citation_tracker.py) ~/.hermes/hermes-agent/tools/
# Option 2: register via registry.py (edit tools/registry.py)
from tools.tools_answer-engine-citation-tracker import register
register() 🤖 Use this tool in your agent
✓ Agent-ready codeCopy the snippet below into your agent, newsletter, or script. The tool page at hermesdispatch.dev/tools/answer-engine-citation-tracker/ is the canonical contract: inputs, outputs, and formulas.
# Hermes Dispatch Tool — Answer Engine Citation Tracker
# Source: https://hermesdispatch.dev/tools/answer-engine-citation-tracker/
# Description: Generate test links for Perplexity, ChatGPT, Gemini, and Copilot to check if a page is cited.
# License: MIT (generated by hermesdispatch.dev)
#
# INSTALL:
# 1. Save this file as ~/.hermes/hermes-agent/tools/answer_engine_citation_tracker.py
# 2. Restart Hermes or run /reset in a session
#
# MANUAL REGISTRY:
# from tools.answer_engine_citation_tracker import register
# register()
import json
def _ok(result):
return json.dumps({"success": True, "data": result}, indent=2)
def _err(message):
return json.dumps({"success": False, "error": message}, indent=2)
TOOL_NAME = "answer_engine_citation_tracker"
TOOLSET = "seo"
SCHEMA = {
"type": "function",
"function": {
"name": TOOL_NAME,
"description": "Generate answer-engine citation test links for a URL and query. Returns Perplexity, ChatGPT, Gemini, and Copilot URLs an agent can open to verify whether a page is cited.",
"parameters": {
"type": "object",
"properties": {
"url": {"type": "string", "description": "Page URL to monitor for citations."},
"query": {"type": "string", "description": "Query to test on each answer engine."}
},
"required": ["url", "query"]
}
}
}
def citation_test_links(url, query):
from urllib.parse import quote
encoded = quote(query)
return _ok({
"target_url": url,
"query": query,
"test_links": {
"perplexity": f"https://www.perplexity.ai/search?q={encoded}",
"chatgpt": f"https://chat.openai.com/?q={encoded}",
"gemini": f"https://gemini.google.com/app?q={encoded}",
"copilot": f"https://copilot.microsoft.com/?q={encoded}",
},
"note": "Open each link and check whether the target_url appears in the answer sources.",
})
def HANDLER(args):
try:
return citation_test_links(args.get("url", ""), args.get("query", ""))
except Exception as e:
return _err(str(e))
def register():
try:
from tools.registry import registry
registry.register(name=TOOL_NAME, toolset=TOOLSET, schema=SCHEMA, handler=HANDLER)
except ImportError:
print("Hermes registry not found; skipping manual registration.")
if __name__ == "__main__":
print(HANDLER({"url": "https://hermesdispatch.dev", "query": "best GPU for local LLM"}))
Want early access to the next locked tool? Subscribe to The Hermes Dispatch.