# https://www.robotstxt.org/robotstxt.html
User-agent: *
Allow: /
# /dict// is the in-DB lookup cache surface. Pages are
# served with `X-Robots-Tag: noindex, nofollow` (CloudFront) and the
# static fallback HTML carries ``, but disallowing crawl entirely avoids spending crawl
# budget on the unbounded URL space.
Disallow: /dict/
# /conjugate// is the dynamic conjugation surface. It
# applies `noindex,nofollow` only at runtime (ConjugatePage), while the
# server fallback HTML is a soft-200 SPA shell. The indexable SEO variant
# lives at the static /verb// pages, so disallow crawling the
# unbounded /conjugate URL space entirely (the indexable /word pages link
# into it with rel="nofollow", but that's a follow hint, not a noindex).
Disallow: /conjugate/
# /my-words is the saved-words app route. The static /word//
# pages link into it as a CTA (/my-words?lookup=&lang=&lemma=1), and
# that React route auto-fires a SmartLookup from the `lookup` param on load.
# A JS-rendering crawler (e.g. meta-externalagent) that follows the CTA boots
# the SPA, triggers a redundant lookup, and mints a throwaway anonymous user
# — inflating analytics for zero SEO value. It's an app surface, not content,
# so disallow crawling it entirely. (The CTA also carries rel="nofollow".)
Disallow: /my-words
# Sitemap
Sitemap: https://wordholder.com/sitemap.xml