Keep the filone.ai demo alias out of search results (FIL-897) - #112
Merged
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
This was referenced Aug 5, 2026
pyropy
force-pushed
the
srdjan/fil-897-alias-noindex
branch
from
August 10, 2026 17:05
a362daf to
aca5459
Compare
pyropy
force-pushed
the
srdjan/fil-897-alias-noindex
branch
from
August 11, 2026 14:44
aca5459 to
dd2dcf2
Compare
pyropy
marked this pull request as ready for review
August 18, 2026 08:52
pyropy
force-pushed
the
srdjan/fil-897-alias-noindex
branch
from
August 18, 2026 09:00
dd2dcf2 to
47888e1
Compare
pyropy
requested review from
alanshaw,
bajtos,
filecoinfoundation-inf and
filipagr
August 18, 2026 09:05
bajtos
approved these changes
Aug 18, 2026
Comment on lines
+5
to
+24
| "headers": [ | ||
| { "key": "Cache-Control", "value": "public, max-age=31536000, immutable" } | ||
| { | ||
| "key": "Cache-Control", | ||
| "value": "public, max-age=31536000, immutable" | ||
| } |
Member
There was a problem hiding this comment.
All changes from this line to the end of the file seem like JSON reformatting. Can you please revert them?
fil.one keeps landing on blocklists and the .one TLD itself is flagged, which breaks live demos, so the same deployment is also served from filone.ai. That alias must not compete with fil.one in search results or dilute it with duplicate content. A host-conditional `has` rule in vercel.json sends X-Robots-Tag: noindex, nofollow for filone.ai and www.filone.ai only, leaving fil.one untouched. It is placed first in the headers array: Vercel's headers are believed to be cumulative rather than first-match, but the two catch-all Cache-Control rules would shadow it if that is wrong, and putting it first costs nothing either way. Canonicals need no change: index.html and useSeo already emit absolute https://www.fil.one/ URLs on every host, so pages served from the alias already point search engines at the canonical domain. robots.txt is deliberately left alone. A Disallow for the alias would stop crawlers fetching the page at all, so they would never see the noindex header — the two mechanisms would cancel out and the alias could still be listed from external links. Refs FIL-897 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
pyropy
force-pushed
the
srdjan/fil-897-alias-noindex
branch
from
August 18, 2026 18:14
b8c2b35 to
a30c77e
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The same deployment is served from
filone.aias well asfil.one, so demos survivefil.onebeing blocklisted. That alias must not compete withfil.onein searchresults or dilute it with duplicate content.
filone.airedirects at the Cloudflare edge and never reaches Vercel, so this rule matches nothing.filone.aiandwww.filone.aiattached to this Vercel project (part of infrastructure#40's prerequisites).Note this PR was previously closed and has been reopened. It originally targeted
filone.net, which was never registered; it now targetsfilone.ai, whose zone isalready Active.
Blocks
website#113 — stacked on this branch.
What changes
One host-conditional entry in
vercel.jsonheaders:{ "source": "/(.*)", "has": [{ "type": "host", "value": "(www\\.)?filone\\.ai" }], "headers": [{ "key": "X-Robots-Tag", "value": "noindex, nofollow" }] }Plus a README section explaining the alias, since
vercel.jsoncan't carry comments.Escaping matters here. The JSON source needs
\\.; after JSON parsing the regexengine receives
(www\.)?filone\.ai. Writing\.is invalid JSON, and writing.unescaped turns it into a wildcard. Verified the parsed value is
(www\.)?filone\.ai.The pattern is unanchored, so it also matches a host merely containing the alias.
That only ever over-applies
noindex, which is the safe direction, so I left itrather than risk an anchoring change that can't be verified without a Vercel preview.
Noted in the README.
Two things deliberately not done
index.htmlanduseSeoalready emit absolutehttps://www.fil.one/…URLs on every host, so pages served from the alias alreadypoint search engines at the canonical domain. Confirmed in the built output.
robots.txtis left alone. Adding aDisallowfor the alias would stop crawlersfetching the page at all, so they would never see the
noindexheader — the twomechanisms would cancel out and the alias could still be listed from external links.
Verification
npm run typecheckclean,npm run lint0 errors (8 pre-existing warnings inuntouched
src/components/ui/*), 32 tests pass, build + 60-route prerender green.vercel.jsonvalidated as JSON and the parsedhas.valueinspected directly.Needs a Vercel preview to confirm end to end, since
has-on-headerscan't beexercised locally:
That last one is the important assertion — a rule that accidentally matched
fil.onewould deindex the production site.
Note
filone.aiis also the domain every production Auth0 email is sent from, and aHubSpot campaign sender. Reputation damage earned by pages served here lands on the
domain that delivers password resets — an accepted trade recorded on
infrastructure#40, and one more
reason to keep the alias unadvertised and unindexed.
Review remediation applied
noindexrule moved toheaders[0]. It was last, behind two entries thatbetween them match every path. Vercel's
headersare believed cumulative rather thanfirst-match, but if that is wrong the rule never fired and this PR was a no-op that read
as done. Moving it is free under cumulative semantics and the fix under first-match, so
it no longer needs a preview to be safe.
filone.ai"served a Cloudflare redirect until FIL-897" — one depends on unmerged work,the other describes a state that will not exist once this lands. The Linear key is out of
the heading, and the
consoleUrl()bullet moved to Point console CTAs at the console on the current hostname (FIL-897) #113, where the module it documentsactually exists.
🤖 Generated with Claude Code