···4848 action: CHALLENGE
49495050dnsbl: false
5151+5252+# By default, send HTTP 200 back to clients that either get issued a challenge
5353+# or a denial. This seems weird, but this is load-bearing due to the fact that
5454+# the most aggressive scraper bots seem to really really want an HTTP 200 and
5555+# will stop sending requests once they get it.
5656+status_codes:
5757+ CHALLENGE: 200
5858+ DENY: 200
+2
docs/docs/CHANGELOG.md
···11111212## [Unreleased]
13131414+- Added the ability to [customize Anubis' HTTP status codes](./admin/configuration/custom-status-codes.mdx) ([#355](https://github.com/TecharoHQ/anubis/issues/355))
1515+1416## v1.17.0: Asahi sas Brutus
15171618- Ensure regexes can't end in newlines ([#372](https://github.com/TecharoHQ/anubis/issues/372))
···11+# Custom status codes for Anubis errors
22+33+Out of the box, Anubis will reply with `HTTP 200` for challenge and denial pages. This is intended to make AI scrapers have a hard time with your website because when they are faced with a non-200 response, they will hammer the page over and over until they get a 200 response. This behavior may not be desirable, as such Anubis lets you customize what HTTP status codes are returned when Anubis throws challenge and denial pages.
44+55+This is configured in the `status_codes` block of your [bot policy file](../policies.mdx):
66+77+```yaml
88+status_codes:
99+ CHALLENGE: 200
1010+ DENY: 200
1111+```
1212+1313+To match CloudFlare's behavior, use a configuration like this:
1414+1515+```yaml
1616+status_codes:
1717+ CHALLENGE: 403
1818+ DENY: 403
1919+```
···3737go tool anubis \
3838 --bind=./anubis.sock \
3939 --bind-network=unix \
4040+ --policy-fname=../anubis_configs/aggressive_403.yaml \
4041 --target=unix://$(pwd)/unixhttpd.sock &
41424243# A simple TLS terminator that forwards to Anubis, which will forward to