with one click
itchio-new-game-hunt
// Hunt for fresh browser-playable games on itch.io /newest that are worth building SEO arbitrage sites for. Crawls new releases, scores them by signals, produces ranked shortlist.
// Hunt for fresh browser-playable games on itch.io /newest that are worth building SEO arbitrage sites for. Crawls new releases, scores them by signals, produces ranked shortlist.
专用于构建高流量 Roblox 游戏工具站的 SEO 架构与工程化方法论。从给定游戏词到最终上线部署的完整流程,包含每日自动关键词挖掘→页面构建→部署管道。
SignalLayer 外链投放客户端(通用版)。供其他 OpenClaw 用户安装使用,通过 SignalLayer.io API 为网站创建外链投放 campaign。支持创建 campaign、查询状态、管理多任务。用户需自行配置自己的 SignalLayer API Key。
AI 热点雷达 - 在新 AI 工具/关键词爆火前发现它们,抢注域名、建站套利。 触发条件: - 用户说「跑雷达」、「热点扫描」、「X 雷达」 - cron 每 12 小时自动触发(9:00, 21:00) 核心目标: 在 AI 关键词/工具首次病毒传播 → 大众认知的 24-72h 窗口内发现, 抢注域名 + 建工具站 + 吃搜索流量红利。 典型案例:Nano Banana、Ghibli AI、OpenClaw、Hermes
HTML5 游戏发现雷达 - 多源监测又新又热的 HTML5 游戏,识别 SEO 套利窗口。 触发条件: - 用户说「跑 HTML5 雷达」、「启动 HTML5 监控」、「HTML5 游戏扫描」 - 每天 cron 自动触发(建议 10:00 / 16:00) 监测平台: 1. itch.io — 独立游戏最大源头,HTML5 首发首选 2. Reddit r/webgames — 玩家发现新游戏第一线 3. Google Trends — 搜索量爆发判断 4. X/Twitter — 游戏病毒扩散早期信号(基于游戏名搜索) 5. Crazy Games / YouTube — 补充信号源 信号评分(0-20)判断游戏是否值得做 SEO 内容。
整站关键词研究与深度挖掘。输入一个网站域名或URL,自动完成:首页主题分析 → 递归式关键词树扩展(Google联想词多级分叉)→ 去重合并 → 关键词分层 → 10词SERP详细分析 → 3词定方向,最终输出完整 Markdown 报告。 触发条件:用户说"分析网站关键词"、"关键词研究"、"keyword research"、"挖掘某网站的关键词"、或提供一个URL说"分析这个网站的SEO关键词机会"。
仓库 Markdown/JSON 内容自动同步到前端页面,配置 GitHub Actions 定时拉取 + 部署,保持 Google SEO 内容新鲜度。支持日报、博客、Changelog、Landing Page 等多种页面模式。
| name | itchio-new-game-hunt |
| description | Hunt for fresh browser-playable games on itch.io /newest that are worth building SEO arbitrage sites for. Crawls new releases, scores them by signals, produces ranked shortlist. |
| category | software-development |
| triggers | ["itch.io 新游发现","找 itch 游戏套利","itch new game hunt","发现值得建站的 itch 游戏","itchio SEO 套利","scan itch.io for games"] |
itch.io 新游套利的黄金窗口:游戏刚上线 → Google 索引不完整 → 搜索竞争低 → 第一时间建站截获流量。本 skill 专注发现环节:从 itch.io 新游列表中筛选出「有 SEO 套利价值」的游戏。
itch.io /newest (36/page)
↓ 第 1 层: Play in browser
~20 games
↓ 第 2 层: 详情页信号扫描 + 评分
~5-8 games
↓ 第 2.5 层: Google Trends 搜索需求验证
~3-5 games(砍掉搜不到的)
↓ 第 3 层: 竞品度评估
1-3 高价值候选
https://itch.io/games/newest/platform-web/free
注意:itch.io 有 Cloudflare 安全验证。如果被拦截,回退到
/games/newest然后靠 CSS 选择器过滤 "Play in browser"。
在 /games/newest 页面的浏览器 console 执行:
(() => {
const cells = document.querySelectorAll('.game_cell');
return [...cells].map(cell => {
const titleEl = cell.querySelector('.title, .game_title');
const title = titleEl ? titleEl.textContent.trim() : '';
const link = cell.querySelector('a[data-action="game_grid"], a.thumb_link');
const url = link ? link.getAttribute('href') : '';
const dataText = cell.querySelector('.game_cell_data')?.textContent || '';
const hasPlayInBrowser = /Play in browser/i.test(dataText);
const genreEl = cell.querySelector('.game_genre');
const genre = genreEl ? genreEl.textContent.trim() : '';
const authorEl = cell.querySelector('.game_author a');
const author = authorEl ? authorEl.textContent.trim() : '';
const imgEl = cell.querySelector('img');
const thumbUrl = imgEl ? (imgEl.src || imgEl.getAttribute('data-lazy_src') || '') : '';
return { title, url, author, genre, thumbUrl, hasPlayInBrowser };
}).filter(g => g.hasPlayInBrowser && g.title);
})()
关键过滤:
hasPlayInBrowser === true → 才能建站内嵌[WIP]/[Demo]/[Prototype] → 未完成品,跳过NON_EN输出: 第一轮筛选列表(通常 15-22 个/页)
对 Phase 1 的每个候选游戏,进入详情页提取信号。
Embed 按钮触发 modal dialog,太低效。改用以下方式:
itch.io game_id 在页面 HTML 中有多处出现:
// 在详情页 console 提取 game_id
const embedLink = document.querySelector('a[href*="/embed/"]');
const dataGameId = document.body.getAttribute('data-game_id');
const pageScripts = [...document.querySelectorAll('script')]
.find(s => s.textContent.includes('"id":'))?.textContent;
const idMatch = pageScripts?.match(/"id":(\d+)/);
const gameId = dataGameId || (embedLink?.href?.match(/\/embed\/(\d+)/)?.[1]) || (idMatch?.[1]);
// embed URL = `https://itch.io/embed/${gameId}`
// 点 Embed 按钮 → 读取 textarea
document.querySelector('textarea')?.value // 提取 iframe 中的 src
// 在详情页 console 执行完整提取
(() => {
const r = {};
// === 基础信息 ===
r.title = document.querySelector('h1')?.textContent?.trim() ||
document.querySelector('.game_title')?.textContent?.trim() || '';
r.url = window.location.href;
// === Embed URL ===
const dataGameId = document.body?.getAttribute('data-game_id') ||
document.querySelector('[data-game_id]')?.getAttribute('data-game_id');
const embedLink = document.querySelector('a[href*="/embed/"]');
const embedHref = embedLink?.getAttribute('href') || '';
r.gameId = dataGameId || (embedHref.match(/\/embed\/(\d+)/)?.[1]) || '';
r.embedUrl = r.gameId ? `https://itch.io/embed/${r.gameId}` : '';
// === 描述 ===
const descEl = document.querySelector('.formatted_description, .game_description, [class*="description"]');
r.description = descEl ? descEl.textContent.trim().substring(0, 2000) : '';
// === 标签/分类 ===
r.tags = [...document.querySelectorAll('a[href*="/tag-"]')]
.map(a => a.textContent.trim().toLowerCase());
r.genres = [...document.querySelectorAll('a[href*="/genre-"]')]
.map(a => a.textContent.trim());
// === 评分 ===
const ratingEl = document.querySelector('.star_rating, [itemprop="ratingValue"], [class*="aggregate"]');
const ratingText = ratingEl?.textContent?.trim() || ratingEl?.getAttribute('content') || '';
r.rating = parseFloat(ratingText) || 0;
r.ratingCount = 0;
const countEl = document.querySelector('[itemprop="ratingCount"], [class*="rating_count"]');
if (countEl) r.ratingCount = parseInt(countEl.textContent) || 0;
// === 下载/浏览/评论数 ===
const statEls = document.querySelectorAll('.game_info_panel_widget .stat, .stats .stat, [class*="stat"]');
statEls.forEach(el => {
const text = el.textContent;
if (/view/i.test(text)) r.views = parseInt(text.replace(/\D/g,'')) || 0;
if (/download/i.test(text)) r.downloads = parseInt(text.replace(/\D/g,'')) || 0;
if (/comment/i.test(text)) r.comments = parseInt(text.replace(/\D/g,'')) || 0;
});
// === 发布/更新时间 ===
const dateEl = document.querySelector('.game_date, time, [class*="published"], [class*="updated"]');
r.publishDate = dateEl ? dateEl.textContent.trim() : '';
// === 开发者 ===
const authorEl = document.querySelector('.game_author a, [class*="author"] a, [class*="owner"] a');
r.author = authorEl ? authorEl.textContent.trim() : '';
r.authorUrl = authorEl ? authorEl.getAttribute('href') : '';
// === Devlog 数 ===
const devlogEls = document.querySelectorAll('.devlog_list .devlog_post, [class*="devlog"] li');
r.devlogCount = devlogEls.length;
// === 平台支持 ===
r.platforms = [...document.querySelectorAll('.platform_img, [class*="platform"] img')]
.map(p => p.getAttribute('title') || p.getAttribute('alt') || '')
.filter(Boolean);
// === 是否免费 ===
const priceEl = document.querySelector('.game_price, .price_tag, [class*="price"]');
r.price = priceEl ? priceEl.textContent.trim() : 'Free';
r.isFree = !priceEl || /free|name your|donation/i.test(r.price);
// === og:image ===
const ogImg = document.querySelector('meta[property="og:image"]');
r.ogImage = ogImg ? ogImg.getAttribute('content') : '';
return r;
})()
Phase 2 只打 80 分基础分。Phase 2.5 的 Google Trends 验证追加 0-35 分趋势分,总分上限 100。
| 信号 | 提取字段 | 权重 | 评分规则 |
|---|---|---|---|
| 可嵌入性 | embedUrl | 🔴 硬性门槛 | 无 embedUrl → 直接淘汰 |
| 游戏类型匹配 | tags, genres | 20 | 含 html5 + action/puzzle/arcade/shooter/simulation → +20;Visual Novel/Interactive Fiction → +5(搜索意图低) |
| 社交证明 | rating, ratingCount, comments, downloads | 20 | rating≥4 → +10;ratingCount≥10 → +5;comments≥3 → +5 |
| 活跃度 | devlogCount, publishDate | 15 | devlog≥2 → +8;7天内更新 → +7 |
| 开发者信誉 | author (多款作品?) | 10 | 开发者有 ≥3 款作品 → +10 |
| 标题搜索友好度 | title 文本分析 | 10 | 标题含明确搜索关键词 → +10;纯品牌名/造词 → +3 |
| 语言 | title, description | 5 | 英语 → +5;多语言 → +3;纯非英语 → +1 |
Phase 2 评分分级:
Phase 2.5 趋势分追加:
⚠️ 关键漏斗层:Phase 2 的「搜索量潜力」评分只是基于标题关键词的推断。Phase 2.5 用真实趋势数据验证推断是否成立。 工具限制: terminal 环境的 pytrends 无法连接 Google(被墙),必须通过 browser 工具访问 Google Trends 页面 + JS 提取数据。
对 Phase 2 评分 ≥ 30 分 的候选逐个查询趋势。
Google Trends 支持一次 URL 比较最多 5 个搜索词。建议每批 3-4 个游戏名 + 1 个锚定词:
锚定词选择:
- 高搜索量: "snake game"(日均~20-30)→ 作为「有需求」的参照线
- 中等搜索量:"escape room game" → 作为「中等需求」参照
- 零搜索量: 留空让新游戏自然暴露
URL 构造:
https://trends.google.com/trends/explore?q={keyword1},{keyword2},{keyword3},{anchor}&date=now%207-d&geo=US
date=now%207-d → 过去 7 天(看到实时趋势)geo=US → 美国市场(英语搜索主力)%20 编码在 Google Trends 页面加载后,用 browser_console 执行:
(() => {
// 1. 平均搜索兴趣值
const avgRow = [...document.querySelectorAll('tr')].find(tr => {
const td = tr.querySelector('td');
return td && td.textContent.trim() === 'Average';
});
const averages = avgRow
? [...avgRow.querySelectorAll('td')].slice(1).map(td => td.textContent.trim())
: [];
// 2. 时间序列(第二个 table)
const tables = document.querySelectorAll('table');
const dataTable = tables.length > 1 ? tables[1] : null;
const timeSeries = dataTable
? [...dataTable.querySelectorAll('tr')].slice(1).map(row => {
const cells = [...row.querySelectorAll('td')];
if (cells.length < 2) return null;
return {
time: cells[0]?.textContent?.trim(),
values: cells.slice(1).map(c => c.textContent.trim())
};
}).filter(Boolean)
: [];
// 3. 非零数据点统计
const nonZeroPts = timeSeries.filter(ts => ts.values.some(v => v !== '0'));
// 4. 峰值
const allVals = timeSeries.flatMap(ts => ts.values.map(Number).filter(n => !isNaN(n) && n > 0));
const maxVal = allVals.length > 0 ? Math.max(...allVals) : 0;
// 5. "Not enough data" 警告
const warnings = [...document.querySelectorAll('[class*="warning"], .error-message, [class*="not_enough"]')]
.map(el => el.textContent.trim())
.filter(t => t.includes('enough data') || t.includes('spelled correctly'));
// 6. 地区分布(第三个 table,如果有)
const regionTable = tables.length > 2 ? tables[2] : null;
const regions = regionTable
? [...regionTable.querySelectorAll('tr')].slice(1, 4).map(row => {
const cells = [...row.querySelectorAll('td')];
return cells.length > 1
? { region: cells[0]?.textContent?.trim(), value: cells[1]?.textContent?.trim() }
: null;
}).filter(Boolean)
: [];
return {
averages,
nonZeroPercent: timeSeries.length > 0
? Math.round(nonZeroPts.length / timeSeries.length * 100)
: 0,
maxValue: maxVal,
hasData: nonZeroPts.length > 0,
warnings: warnings.slice(0, 3),
regions
};
})()
| 趋势信号 | 评分逻辑 | 分数 |
|---|---|---|
| 平均搜索值 > 0 | 有需求被记录 | +15 |
| 平均搜索值 ≥ 锚定词的 50% | 需求可观 | +10 |
| 非零数据点 > 50% | 需求持续非偶然 | +10 |
| 峰值 ≥ 30(相对值) | 有搜索爆发潜力 | +10 |
| warnings 含 "not enough data" | 无搜索需求验证 → -20(罚分) | — |
| 平均值 = 0 且无 warning | 偶发搜索 → 保留但标记 | +0 |
趋势分级:
第 1 批:锚定词 "snake game" + 游戏1 + 游戏2
→ 拿到锚定线 + 两个游戏的相对值
第 2 批:锚定词 "snake game" + 游戏3 + 游戏4
→ 同锚定词保持可比性
...
关键逃逸条件: 如果一批中的锚定词也返回 0(整个 Trends 页面数据异常)→ 标记此次扫描异常,不淘汰任何游戏,改天重扫。
对 Phase 2 评分 ≥ 40 分 的候选,评估 Google SERP 竞争情况:
"{title} game" 或 "play {title} online"browser_navigate 或 SerpAPI)| SERP 格局 | 评估 | 行动 |
|---|---|---|
| 0-2 个独立站 + itch.io 排第 1 | 🟢 窗口大开 | 立即建站 |
| 3-5 个中等站 | 🟡 竞争存在 | 差异化可行性评估 |
| 5+ 个强站 | 🔴 窗口关闭 | 跳过 |
| 0 个搜索结果 | ⚪ 无搜索需求 | 跳过(白费力气) |
- 标题是否精准匹配 "{GameName} Game Online"?
- H1 是否含 "play" + "free" 关键词?
- 是否有 FAQ section?
- 内容深度 ≥ 500 词?
- 是否有结构化数据 (VideoGame Schema)?
→ 如果现有站点在这 5 项中缺 ≥ 3 项 → 有超越空间
生成结构化推荐报告:
# 🎯 itch.io 新游套利发现报告
**日期:** 2026-XX-XX
**来源:** https://itch.io/games/newest
**扫描:** 36 个游戏 → 20 个 browser-playable → [N] 个高价值
## 🟢 高价值候选 (≥60分)
| # | 游戏名 | 评分 | 类型 | 搜索潜力 | 竞品度 | 推荐行动 |
|---|--------|:---:|------|:---:|:---:|------|
| 1 | {title} | {score} | {genre} | 🟢/🟡 | 🟢 | 立即建站 |
| 2 | ... |
## 🟡 观测列表 (40-59分)
| # | 游戏名 | 评分 | 类型 | 缺失信号 | 观测建议 |
|---|--------|:---:|------|------|------|
| 1 | {title} | {score} | {genre} | 评论/评分为0 | 1周后复查 |
## 🔴 已淘汰
- {title} — 原因: {淘汰理由}
browser_navigate → /newest → 提取 Phase 1 列表(JS console)
→ 对每个 Play in browser 候选 → 详情页 → Phase 2 信号提取 + 评分
→ 对 ≥30 分候选 → 分批 Google Trends → Phase 2.5 趋势验证
→ 对 趋势通过 + ≥50 总分 → Google SERP → Phase 3 竞品评估
→ 输出 Phase 4 报告
每天 1 次 → itch.io /newest → Phase 1 → Phase 2 → Phase 2.5
→ 仅输出趋势通过候选 → 本地保存 JSON
/games/newest 基础页,靠 Play in browser 文本在 JS 中过滤/newest/platform-web/free 更易触发 CF 验证;在基础 /newest 页用 JS 过滤更稳定<iframe src="https://itch.io/embed/{id}">,这是完整游戏页面的嵌入形式,可以直接用☆、!、')时需 URL 编码。建议用 encodeURIComponent() 处理游戏名后再拼 URL