# As a condition of accessing this website, you agree to abide by the following # content signals: # (a) If a Content-Signal = yes, you may collect content for the corresponding # use. # (b) If a Content-Signal = no, you may not collect content for the # corresponding use. # (c) If the website operator does not include a Content-Signal for a # corresponding use, the website operator neither grants nor restricts # permission via Content-Signal with respect to the corresponding use. # The content signals and their meanings are: # search: building a search index and providing search results (e.g., returning # hyperlinks and short excerpts from your website's contents). Search does not # include providing AI-generated search summaries. # ai-input: inputting content into one or more AI models (e.g., retrieval # augmented generation, grounding, or other real-time taking of content for # generative AI search answers). # ai-train: training or fine-tuning AI models. # use: how AI systems may consume the content (immediate, reference, or full). # ANY RESTRICTIONS EXPRESSED VIA CONTENT SIGNALS ARE EXPRESS RESERVATIONS OF # RIGHTS UNDER ARTICLE 4 OF THE EUROPEAN UNION DIRECTIVE 2019/790 ON COPYRIGHT # AND RELATED RIGHTS IN THE DIGITAL SINGLE MARKET. # BEGIN Cloudflare Managed content User-agent: * Content-Signal: search=yes,ai-train=no,use=reference Allow: / User-agent: Amazonbot Disallow: / User-agent: Applebot-Extended Disallow: / User-agent: Bytespider Disallow: / User-agent: CCBot Disallow: / User-agent: ClaudeBot Disallow: / User-agent: CloudflareBrowserRenderingCrawler Disallow: / User-agent: Google-Extended Disallow: / User-agent: GPTBot Disallow: / User-agent: meta-externalagent Disallow: / # END Cloudflare Managed Content User-agent: * Allow: / # Private or session-only surfaces. Nothing here renders without an account, # so a crawler that follows these links only ever reaches the login form -- # which is what would get indexed under the puzzle's name. Each is listed in # both shapes because every public page also exists under a locale prefix # (/fr/history is the same private page as /history). Disallow: /users/ Disallow: /settings Disallow: /admin Disallow: /history Disallow: /friends Disallow: /challenges Disallow: /api/ Disallow: /r/ Disallow: /*/users/ Disallow: /*/settings Disallow: /*/history Disallow: /*/friends Disallow: /*/challenges # The scroll is public, but the query strings behind it are the same feed # sliced differently -- one indexed address is what we want, not fifty. # # The scroll moved to "/", and the rule deliberately did NOT move with it: a # `Disallow: /?` would match every query string on the apex, which is where # `?ref=` and `?src=` land -- i.e. every campaign and affiliate link the # product has. The canonical on "/" is what dedupes those instead, which is # the weaker instrument and the only correct one here. Disallow: /create? Disallow: /*/create? # One line, and it points at an *index*: the shards it names live under # /sitemaps/ and are deliberately not listed here. A sitemap index is the # supported way to declare more than one file, and a robots.txt naming forty # shards would be a second list of them -- one that goes stale the day a game # type is added, silently, while the index stays right by construction. Sitemap: https://ohwa.it/sitemap.xml # The site plan a person reads, and the one page every game type is one click # from: https://ohwa.it/sitemap (and /fr/sitemap, /de/sitemap, ... for the other # fourteen). Not a `Sitemap:` line -- that directive means an XML sitemap, and # pointing it at an HTML page is how a crawler is told the whole index is # malformed. It is a comment for the same reason the two files below are, and it # is linked from the footer of every page, which is the declaration that counts. # Written for an assistant rather than for a crawler: what this product is and # where each game is played (/llms.txt), and the full rules of every game type # (/llms-full.txt). There is no directive for these, so they are named here as # a comment -- robots.txt is the one file every reader already fetches, and a # pointer costs nothing to anything that does not understand it. # https://ohwa.it/llms.txt # https://ohwa.it/llms-full.txt