A native Pi payment carries no observable per-unit mining origin on the Pi Mainnet ledger.
Canonical host: https://aybvip.github.io/pi-fungibility/ — this is the copy
that search engines are told to index, and the URL cited everywhere (README,
llms.txt, GitHub profile, CITATION.cff, sitemap, IndexNow).
Netlify and Cloudflare Pages serve mirrors: pure redundancy for reach and resilience. They carry canonical tags pointing back at GitHub Pages, so they add no duplicate-content surface and cannot split search ranking.
_config.yml targets a GitHub Pages project site:
url: https://aybvip.github.io
baseurl: /pi-fungibility
Every generated link therefore begins with /pi-fungibility/…. That is correct
on GitHub Pages, but the mirrors are served from the root of their own
hostname — those links would all 404.
--baseurl "" alone is not enoughjekyll-seo-tag builds the canonical URL as site.url + site.baseurl + page.url.
Emptying baseurl while leaving url alone would emit
https://aybvip.github.io/docs/… — a page that does not exist.
_config.mirror.yml therefore moves the subpath into url and empties
baseurl:
url: https://aybvip.github.io/pi-fungibility # subpath relocated here
baseurl: "" # links become root-relative
which simultaneously yields:
| Output | Result |
|---|---|
rel="canonical" / og:url / sitemap.xml |
https://aybvip.github.io/pi-fungibility/docs/… ✅ correct |
| internal + asset links | /docs/…, /assets/… ✅ work at mirror root |
Build command for every mirror:
bundle install
bundle exec jekyll build --config _config.yml,_config.mirror.yml
Gemfile pins the github-pages gem, so the mirror build uses the same plugin
set GitHub Pages does and stays byte-compatible with the canonical output.
Checked in CI / locally before adding a host (31 HTML pages):
rel="canonical" → GitHub Pages with
the /pi-fungibility subpath/pi-fungibility/ prefixsitemap.xml URLs target the canonical host — never the mirrorassets/css/style.css reachable at /assets/…404.html built, and excluded from the sitemapindex.html uses relative links, so it resolves on any hostllms.txt, robots.txt, the IndexNow key and the Bing/Google verification files are all servedIndexNow: pass
keyLocation. The key file lives in this repository, so it is served under the subpath —https://aybvip.github.io/pi-fungibility/<key>.txt— not at the host root (https://aybvip.github.io/<key>.txt, which 404s). Submissions must therefore send thekeyLocationparameter; without it the API replies202 Accepted, then rejects the site asynchronously with403 UserForbiddedToAccessSite.
The two pages with no canonical are deliberate:
examples/app-payment-flow/frontend.html (a code sample) and
google03c2168aa2e4f288.html (search-engine verification — must stay verbatim).
netlify.toml in the repo root already sets the build command, publish directory
and headers. In Site settings → Build & deploy:
| Field | Value |
|---|---|
| Base directory | (blank — repo root) |
| Build command | bundle install && bundle exec jekyll build --config _config.yml,_config.mirror.yml |
| Publish directory | _site |
| Repository | aybvip/pi-fungibility |
⚠️ Do not point a site at
aybvip/aybvip. That profile repository holds onlyREADME.md; its payment app was archived to thearchive/payment-appbranch (tagpayment-app/v1). A site still linked there will fail to build.
Create a Pages project connected to aybvip/pi-fungibility:
| Setting | Value |
|---|---|
| Framework preset | Jekyll |
| Build command | bundle install && bundle exec jekyll build --config _config.yml,_config.mirror.yml |
| Build output directory | _site |
| Root directory | / |
bundle installtakes a few minutes the first time — thegithub-pagesgem is large. Build timeout is the only realistic failure mode.
--config _config.yml,_config.mirror.yml.sitemap.xml — the
canonical host is the only one that should be indexed.Nothing on the canonical host changes when a mirror is added or removed.