Repo findability
Improves the discoverability (SEO + GitHub findability) of a GitHub repo and its deployed web app on Vercel, Netlify, Render, or Fly.io. Audits and fixes sitemap.xml, robots.txt, page/site metadata (title, description, canonical, OpenGraph/Twitter cards), a footer attribution signature, GitHub topics, repo description, license, and README, then guides search-engine submission and distribution. Use when the user asks to "improve findability/SEO", "make my repo/site more discoverable", "get indexed by Google", "add a sitemap/robots", "set GitHub topics", "add a signature/credit to my site", or "help people find my project".From its SKILL.md
npx -y skills add sanzgiri/pi-skills --skill repo-findabilityAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
10.1 KB, ~2.3k tokens by cl100k_base, as published. Nobody here has run it
Repo & Deployment Findability
Two distinct audiences must be able to find the project:
- Search engines / end users → crawl and index the deployed site (Vercel/Netlify/Render/Fly).
- Developers → discover the GitHub repo via topics, search, and a clear README.
This skill covers both. Always audit first (report current state), then fix automatable items, then hand the user the manual high-impact steps (search-console submission, social distribution). Do not silently change GitHub metadata or push commits without confirming with the user.
Inputs to gather first
- Repo:
owner/name(derive fromgit remote -vif not given). - Live URL: the deployed site URL (check GitHub
homepageUrl, the deploy provider, or ask). - Framework: Next.js, Astro, SvelteKit, Vite SPA, plain static, etc. This decides how sitemap/robots/metadata are added.
- Provider: Vercel | Netlify | Render | Fly. Affects only deploy/config notes, not the SEO files themselves.
Workflow
- audit() — run
scripts/audit.sh <owner/name> <live_url>(or do the checks manually). Report a table of what exists vs. missing. Never assume — verify withgh, file listing, andcurl/web_fetch. - fix_site_seo() — add/repair the crawlable SEO surface (see "Site SEO" below). Framework-specific. Verify with a build.
- add_signature() — add a footer attribution signature on every page (see "Footer signature" below). Draft it, show it to the user, and get approval before applying — it is user-visible branding.
- fix_repo_metadata() — GitHub topics, description (with URL), license, README quality (see "GitHub findability"). Confirm before editing.
- verify() — rebuild the site; confirm
/sitemap.xmland/robots.txtresolve and the sitemap lists every page; confirm the signature renders in the built HTML. Re-querygh repo viewto confirm topics/description. - handoff() — give the user the manual, high-impact steps that an agent cannot do (Search Console / Bing verification + sitemap submission, social/distribution). See "Manual high-impact steps".
Site SEO (the crawlable surface)
Target three things, in priority order:
sitemap.xml— lists every indexable URL. Highest impact: without it, deep pages may never be discovered.robots.txt— allows crawling and points to the sitemap.- Metadata — per-page
<title>+description, a site-widemetadataBase/canonical, and OpenGraph + Twitter card tags for rich social previews. Optionally a 1200×630 OG image.
Framework recipes
- Next.js (App Router): add
app/sitemap.tsandapp/robots.ts(useMetadataRoute.Sitemap/MetadataRoute.Robots); setmetadatawithmetadataBase, a titletemplate,openGraph, andtwitterinapp/layout.tsx; usegenerateMetadatain dynamic route segments. Seereferences/checklist.mdfor copy-paste snippets. - Next.js (Pages Router): use
next-sitemap(postbuild) or a custompages/sitemap.xml.tsx; metadata vianext/heador a shared<SEO>component. - Astro:
@astrojs/sitemapintegration;public/robots.txt;<meta>/OG tags in the base layout (orastro-seo). - SvelteKit: a
+server.tsroute for/sitemap.xml;static/robots.txt;<svelte:head>for meta. - Vite SPA / plain static: generate a static
sitemap.xml+robots.txtinto the published output dir (e.g.public/); put OG/meta inindex.html. SPAs render poorly for crawlers — prefer SSG/prerender if SEO matters.
Always set the canonical/base URL to the real deployed URL (the provider's domain or the user's custom domain), not localhost.
Provider notes
- Vercel / Netlify: framework adapters serve
sitemap.xml/robots.txtautomatically once the files/routes above exist; static files inpublic/are served at the root. Netlify Next.js builds run via@netlify/plugin-nextjs. - Render / Fly: same files; ensure the build copies them into the served directory and that no reverse-proxy/route rule blocks
/robots.txtor/sitemap.xml. - Confirm a custom domain choice early; switching domains later forces canonical/sitemap/Search-Console rework.
Footer signature
A small attribution line in the site footer, shown on every page. It credits the author and links back to their portfolio/profile and the repo. This aids findability (an author signal on every page + an internal link to the source) and branding.
Template
Created by {AUTHOR} · {LINK_1_LABEL} ({LINK_1_URL}) · {LINK_2_LABEL} ({LINK_2_URL})
Defaults / how to fill the variables:
{AUTHOR}— fromgit config user.name(confirm with the user).- Links — prefer two: a personal site/portfolio and the repo source. Derive a portfolio/profile URL from
gh api user --jq .blogor the GitHub profile (https://github.com/<login>); derive the source URL from the repo. Reasonable default labels:Portfolio(orSite) andSource. - Wording — default
Created by; alternatives the user may pick:Built by,Made by,© {YEAR} {AUTHOR}. - Year — omit unless the user wants a copyright year.
Example (concrete): Created by Ashutosh Sanzgiri · Portfolio (https://sanzgiri.github.io/portfolio/) · Source (https://github.com/sanzgiri/thinking_tools)
Review the signature (do this before applying)
The signature is user-visible, so always draft it, present it, and get explicit approval. While drafting, validate:
- Name is spelled correctly and is the form the user wants.
- Every link resolves (HTTP 200) — check with
curl -sI; never ship a dead or placeholder (#) link. - No redundancy — if one link (e.g. a portfolio) already contains the others (e.g. a GitHub-profile link), drop the duplicate. Two links is usually the clean maximum.
- Placement & style — sits in the existing footer, visually subordinate (muted, smaller), does not duplicate other footer content, and matches the site's styling (reuse footer link colors/classes).
- Wording/year match the user's stated preference.
- Implementation fits the framework — a footer component/partial, not a hand-edited copy on every page. Add it once where the shared layout/footer lives.
After applying, rebuild and confirm the signature text + both URLs appear in the built HTML.
GitHub findability
- Topics (biggest lever):
gh repo edit <owner/name> --add-topic <t>(repeat). Use 5–12 relevant tags: framework (nextjs,astro), language (typescript), domain, and subject keywords people search. - Description, website field, license, and README polish are covered in "Manual & cross-cutting high-impact items (the 8)" below — see items 1–3.
- Optional: pin the repo on the profile (item 4), add a social preview image in repo settings (related to item 8).
Manual & cross-cutting high-impact items (the 8)
After the automated fixes, walk the user through these. Items 1–3 you can do/draft with confirmation; 4–8 are mostly manual or off-platform — hand them over with exact instructions. Ordered by impact.
- License — add one if missing (commit a
LICENSEfile, e.g. MIT). Unlicensed repos deter reuse and stars. Can be automated with confirmation. - Repo description + website field — make the description concise and keyword-rich and include/point to the live URL:
gh repo edit <owner/name> --description "..." --homepage <url>. Automatable with confirmation. - README polish — one-line value prop at the top, a screenshot/GIF, a live-demo link, and the tech stack. Visuals materially increase engagement. Add the screenshot section; the user supplies the image.
- Pin the repo on the GitHub profile — manual (Profile → Customize your pins). Tell the user; an agent cannot do it.
- Submit the sitemap to Google Search Console — verify the domain, then submit
<url>/sitemap.xml. Single biggest accelerator of indexing. Manual, one-time. - Submit the sitemap to Bing Webmaster Tools — verify + submit the sitemap. Manual, one-time.
- Backlinks / distribution — share where the audience is (relevant subreddits, Hacker News "Show HN", dev.to, communities, link from any related blog/profile). Organic backlinks drive ranking more than on-page tweaks.
- Custom OG image + analytics — add a 1200×630 OpenGraph image so shared links have rich previews (wire it into the metadata once the user provides/approves an image), and optionally add privacy-friendly analytics (Plausible, Vercel/Netlify Analytics) to measure what works.
Guardrails
- Audit before changing. Report current state with evidence; don't assume files/topics are missing.
- Confirm before mutating GitHub (topics/description/license) or pushing commits. These are user-visible and hard to undo cleanly.
- The footer signature is user-visible — draft, present, and get approval before applying; verify both links resolve and avoid redundant links.
- Verify every change with a build and by fetching
/sitemap.xmland/robots.txt, and by confirming the signature renders. - Use the real deployed URL in canonical/sitemap/robots/signature — never localhost or a placeholder.
- Don't fabricate a live URL; if unknown, ask or derive it from
gh repo view --json homepageUrl/ the provider.
References
references/checklist.md— the full audit checklist and copy-paste Next.js snippets (sitemap.ts, robots.ts, layout metadata).scripts/audit.sh— prints a findability audit for a repo + live URL.
What ships with it: 3 files
14.2 KB alongside SKILL.md, 1 of them executable
references/
- checklist.md5.9 KB
- manual-steps.md4.8 KB
scripts/
- audit.shruns3.4 KB