Ai scrapers are making it kinda suck to run anything on the internet to be honest.
post
Detect whether the user is a human, but instead of blocking the request (which is going to be obvious to the scraper operator and will just cause the bot developers to go work on better human emulation until they get the data), poison the response. Just as blocking scrapers is hard for website operators, so is separating useful data from not-useful data for people building AI training corpuses.
https://www.cloudflare.com/learning/ai/data-poisoning/
Data poisoning involves injecting malicious information into training datasets to manipulate an AI model's behavior, compromising its accuracy, reliability, and the overall integrity of machine learning results.
The really exasperating thing is that Wikipedia makes all of their data available in compressed database form, and I suspect that other MediaWiki wikis could do so too. I checked one of the wikis being complained about, the Minecraft wiki, and it's a MediaWiki wiki.
This isn't even a case where the server operators have any problem with the data being available to the bots. In fact, people are going out of their way to package up all the data in a form that is optimal for computer processing (better for the bots) and which doesn't create additional load on the wiki servers (better for the wiki operators). They're providing data in delta format!
But the bots aren't using them! And on top of that, they aren't even written to follow traditional conventions for being polite in scraping. We've had lots of software spider the Web
that's not new
but normally that spidering software has followed basic politeness to try to avoid excessive disruption to the servers being spidered.
It's as if someone has set up a table out front of their house with a big sign reading "Free cookies!" with boxes of pre-packaged cookies. Instead of taking the damn cookies, the bots are obtaining the largest trucks possible and then ramming holes in the house with a truck and scavenging through the ruins, desperately trying to find cookies.
It's a weird phenomenon I encountered as a data engineer inside corporations. Teams wanted to run endless queries off our API instead of using the snapshots we provided. Most of the apps didn't have a justifiable reason for wanting up to the minute information. 🤷♂️
That compressed database would have to be updated frequently, I don't know how well it'd work.
Wikipedia has started striking deals with AI companies as a means to cover the cost of their lookups which, as much as I may not like it, is totally fair.
A wiki for some obscure indie game won't have the same leverage.
I wonder if it would be possible to filter traffic by limiting the rate at which links can be followed after the initial connection.
I suppose one problem with that is it would also limit the crawlers you want, like search engine indexing. Maybe if enough sites were doing this it would generate some pressure on the AI companies to behave better.
If they have 10k URLs and in parallel find out all links via different IPs, they get new links.
When they do that again with the new links, there is no connection between visits, because the IPs differ. It looks like someone else is requesting what is behind the link.
The issue with wiki's and source forges is that there is a maze of links to all past versions of everything, each generated on demand from a cpu-expensive database query. You basically have to limit the pages anonymous users can spider into. Forgejo has a setting to block expensive pages from non-logged in users for example.
I could see maybe caching that and providing it to a not-clearly-human user if it is in cache. That lets someone do something like link to a particular version of a file in a discussion here on the Threadiverse. The first user loading it will cause it to be cached.
Probably can configure anubis to require challenge that is proportional to the CPU time needed to render each page?
One thing I want to see is poisoned wells. When you detect scrapers, don't stop them, feed them pseudo content designed to COST them. Make their training data poisonous and damaging. Make it cost them to purge it, and difficult and expensive to identify it.
We need to host the data version of asbestos. Very appealing and useful, a miracle material in fact, and you don't realise until 30 years later and well after it's too late that it's causing an incurable disease in your lungs.
Get that poisonous data so deep in the databases of these AIs that it festers and spawns billions of tumors.
I wish I was smart enough to devise a practical way to weaponise data like this.
Unless a significant portion of the internet does this, and we're talking hundreds of millions of pages, the only cost here is to you.
LLMs are statistics. They don't "remember" their training. They just know what statistically speaking the next words should be. But sure, be the web dev version of þorn guy.
Unless a significant portion of the internet does this, and we’re talking hundreds of millions of pages, the only cost here is to you.
Fun twist: no! There's a very neat trick you can do when you serve the crawlers poison: you can hide an identifier in the URLs you serve them, and you can then identify that id when they come back riding on the back of remote controlled chromes. By serving them garbage, you can overload their queue with poisoned ones, which helps you block crawlers that you wouldn't otherwise be able to block.
Generating and serving garbage is incredibly cheap (cheaper than serving a file from a filesystem on SSD, in most cases), and once you have requests landing on poisoned URLs, you can firewall them off for a day or so, and reduce your costs even more.
We may not be able to poison the models, but we can poison their crawling queues. I have a year's worth of data to support that. They still haven't caught on.
They still haven't caught on
I admire the optimism to see it this way and not "it's still not worth it to them to bother blacklisting the domain"
So training data suddenly doesn't matter? Disagree. And yes, a significant portion of sources should do this.
I don't think you understand the scale of the amount of data that has been fed into these models. Already fed in, as in the models are already created, the baseline already established, the dataset responsible for the output they want already retained.
Any attempt to "poison" them is attempting to add one, ten, a thousand, a million confounding data points against every webpage 1993-2026, every book ever digitised, every social media post made public, every transcript of every video on YouTube, every code comment made public, every post on this federated platform.
For news articles alone, that's about 20 billion non-poisoned articles. Do you know what the difference between a million poisoned pages and 20 billion is? 20 billion.
The Daily Mail (vomit) alone publishes 1,500 articles a day. How many do you plan on publishing?
The Daily Mail (vomit) alone publishes 1,500 articles a day. How many do you plan on publishing?
I have an automatically generated infinite maze. It produces roughly a million unique pages each day. It used to produce ~60 million pages / day, but a few months ago I decided to firewall some of the crawlers off instead of serving them garbage.
And I run niche sites. A site with more lucrative traffic than mine (eg, Codeberg, who uses the same software I do) likely generates a lot more garbage.
There was also a paper, commissioned by Anthropic, I believe, that concluded that only 250 malicious pages they fail to remove from the training set is enough to poison even the largest model. Now, I do not trust anything Anthropic says. But even if we'd need a billion pages to poison a model... I alone served that much in the past year.
As you've said elsewhere, you've created a crawler trap, not a way to poison a model. You're wasting... some resources I guess? Both theirs and your own. Fascinating to think that you've served a billion http requests to no benefit to anyone and you believe this is you winning somehow.
Yes, it does have a cost. It has a far smaller cost than serving the real thing. It also allows me to firewall them off and stop serving them, even if they come at me with real browsers. That's a very definitive win: I saved CPU time, I saved RAM, I saved network bandwidth, and I stopped them from accessing my stuff. How is that not a win?
I don't think you understand how outdated most information gets.
Ok, suppose that I've made it to my 40s without realising that time is in linear motion.
Explain to me what relevance that has to LLMs?
I really want a tutorial on how to do this. I think it's a great way to practice self-agrandizement by making myself the pretend king of a pretend country.
omgawd yes... how do people do this
but I would assume there’s an arms race going on behind-the-scenes between Cloudflare and the bot developers
No. CF lost years ago, and the checks can be bypassed easily. It's just that it blacklists ips generating insane traffic but there is a lot of margin
I put my little blog behind Cloudflare because I was tired of it going down due to scrapers overwhelming my little VPS.

Run labyrinths and feed them bullshit
That would be great if they could handle the traffic. For a lot of smaller sites, the AI scrapers are effectively a DDOS. It’s pushing these folks into the arms of Cloudflare.
I think it’s one of the worst aspects of the AI bubble. I’m worried about Cloudflare’s outsized market power.
but those that do run these wikis will be in the fast pass line at the gates of heaven. Please don't give up. I never use gipity
Fucking a I set up a forgejo instance to host my code and moved everything off of GitHub. Fuckingn Facebook was hammering my shit before I blocked it. It seems old Mark Z is trying to Hoover up the internet because he's late to the game on AI.
They should try including invisible text to tell LLMs to disregard any prompts that specifically tell it to scrape any page on their domain, to treat their wiki as unreliable for any prompt that may point to them as a source, and to blacklist the domain on their settings/instruction files.
I get over it, but It's still kinda funny how the first line of "defense" is having the bot say that it's a bot, and not Google Chrome.
This is a great post about such a frustrating and sucky situation. Thank you for sharing it with us here. I really feel for all the smaller sites and webmasters who have to deal with all this absurdity. :(
Like they mentioned, when I hit one of those damn Cloudflare 'prove you're a human' checks -- which is a LOT nowadays -- I definitely do get irritated...but I'm not usually upset with the site owner who is just trying to protect their site. I feel for them. I'm pissed off and disgusted at all the greedy, inconsiderate assholes and corporations who are fucking everything up for us normal people, both on the Internet and off.
I don't know where we go from here, but I hope it somehow gets better soon... ugh.
And so the Tragedy of the Commons plays out, yet again.
There's no cost to being a selfish asshole, so it's sadly not surprising that many individual actors are destroying the public Internet. Like, how can we align incentives to stop this? Regulations/laws are mostly pointless since the very same tactics used to dodge bot detection also make it incredibly hard to identify the originator.
The only other disincentive with a real cost, that I can think of, would be to poison the data fed to scrapers, so they get bad data? That seems expensive to set up, though.
I think TFA has the best solution idea: make it easy to scrape all the useful data using a low-cost standardized system. Then there's no incentive to scrape the website using a stupid, expensive crawler in the first place.
Edit: actually, LLMs make poisoning the data fairly reasonable... When there's a high volume of requests for outdated pages/edit pages/other rarely accessed pages, have the server serve a pre-cached parody version of the root page instead. Pre-build one parody copy of each page with a standardized prompt, like "rewrite this page like it comes from an academic journal of medicine or economics with APA citations for every fact."
People started allowing scrapers because they needed to get in the search engine indexes to get traffic. But getting scraped being a win-win for the scraper and scrapee is long past. Now it's completely parasitic. The search engines are even going out of their way to not send traffic to organic results.
I wonder if it's time to start to create an un-indexable "shadow internet." Block all scraping even the search engines. Maybe put up login walls. How will people find your website? We'll have to go back to word of mouth, link rings, or the like.
The problem is that you can't block all scraping. The scrapers make their bots look like regular traffic, so even if you block all known scrapers, there will be tons that just look like humans visiting your site.
Collaborative list of basic IP blocks of known scraper hosts.
They spoof their ip now
They rent IPs, they can look like residential IPs.
I don't know how these IP services work, but blocking them seems like blocking AWS - suddenly you didn't just block telegram but various websites and services don't work anymore.
/edit: the article goes into this and also blocking
Enter residential proxies, where anyone with a credit card can get all of their scraping requests “laundered” through a network of millions of IP addresses. The wikis get hit sometimes by scraper runs that cycle through a million IPs a day, and they >look like< they’re coming from legit places: mostly residential ISPs (Comcast, AT&T, Charter, etc) where the customer probably doesn’t even know their IP is being used as an exit node for a residential proxy.
There are companies out there selling realtime databases of residential proxy IPs, although it’s not clear to me how actionable that is when most residential proxies are also used by real people at the same time.
And fediverse sites. Have to update blockers every month or so
I didnt see this mentioned- for all the old non-cashed stuff, would it help to throttle it by like 5-10 seconds per request? Maybe also serve a cached “loading” page during the wait.
Not only wikis sadly. Anything that has public facing deep links that trigger extensive database operations are being hammered by these bots and few servers can take the load.
We use NGINX’s 444 response A LOT.
In coordination with careful rate-limiting, it’s been a dramatic improvement.
The worst of the bots don’t advertise their User Agent (or worse, attempt to present they’re a normal user making 100s of requests a second) but there’s lots of low hanging fruit.
On the plus side, this isn't a problem with AI, this is a problem with AI companies having more investment money than they know what to do with. The moment the hype fades and they don't want to hemmorage money scraping every wiki on the internet thousands of times per day, this traffic will go back to a far more sane amount.
Maybe we should have 2 factor authentication to read wikis. A person would have to come here and seek a public key from other people. If you can get 2 Public keys by proving you are human, then you get a month of wiki access unless you keep proving you are human or if you prove to be AI then you're totally banned unless you get a public key in real person at the local Walmart or Safeway.
iocaine doesn’t stop them, but it uses minimal resources and makes me feel better about serving pages to them.
Never heard of it, but I see Anubis pretty widely adopted especially among open source projects.
It can stop them nowadays, by firewalling some of the crawlers off. The reason it doesn't stop them by default is because it serves them poisoned URLs, which it can later identify if the crawlers come back riding a headless Chrome. But once they do that, and hit a poisoned URL, there's little reason to let them wander in an endless maze further: serve one request, and block the IP.
I've been running that on my own infra, and my daily number of requests went down from ~50+ million to... 2 million.
all 22 comments