# AI uBlock Origin Blacklist: a hand-curated list of AI content farms

> The ai-ublock-blacklist project is a personal list of websites the author judged to be generated by AI, published as filter lists for uBlock Origin and uBlacklist with a JSON source format and a documented schema. It suits a reader who is tired of machine-written search results, and its size and its editorial bias are exactly what a personal list implies.

**alvi-se/ai-ublock-blacklist** — Websites I personally found that are completely generated by AI. Pull requests welcome.

- Repository: https://github.com/alvi-se/ai-ublock-blacklist
- Website: https://subscribe.adblockplus.org/?location=https%3A%2F%2Fraw%2Egithubusercontent%2Ecom%2Falvi%2Dse%2Fai%2Dublock%2Dblacklist%2Fmaster%2Flist%2Etxt&title=AI%20Content%20Farms
- Stars: 708 · Forks: 18
- Language: Adblock Filter List
- License: GPL-3.0
- Published: 2026-10-21 · Updated: 2026-10-21 · Language: en
- Canonical page: https://hysenlabs.com/projects/alvi-se-ai-ublock-blacklist

## What the list is, and the argument behind it

The AI uBlock Origin Blacklist is a personal list for uBlock Origin and uBlacklist blocking AI content farms, and the readme explains why it exists in the author's own terms.

The starting observation is that while browsing, it happens sometimes, most of the times, that the author comes across websites whose text is written by generative AI, and that these websites provide no useful information, have mediocre content and are filled with ads and referral links to earn money. So when such a site is found, it goes on the list.

The principle behind it is stated with unusual clarity: if the author wanted the question answered by AI, they would ask AI. If someone is searching online, it means they want an answer written by a person, and a person has experience, opinions, ideas and creativity that AI does not have.

There is a second argument, and it is the stronger one. AI content can be dangerous, because articles in content farms are not checked by anyone before being published, since they are massively generated. The readme's examples are vivid: an AI hallucinating on a dangerous topic and suggesting you short-circuit a circuit board, or execute something like rm -rf / on your machine, or mix bleach and ammonia, with the reader's own emphasis that these must not be done. The argument is not that generated text is always wrong, it is that nobody checked, so it needs to be blocked.

The audience is readers who share that stance, and the format is a blocker filter list rather than a piece of software.

## Subscribing in uBlock Origin and in uBlacklist

Installation is subscription rather than installation, and there are two ways to do it for each blocker.

For uBlock Origin, the readme links a subscribe URL that registers the list automatically. The alternative is to import it manually, by going to the uBlock Origin options, the Filter lists tab, then Import..., and entering the raw URL:

* `https://raw.githubusercontent.com/alvi-se/ai-ublock-blacklist/master/list.txt`

For uBlacklist, the same pattern applies with a different subscribe endpoint, and the manual route is Options, Subscription, the Add a subscription button, and the URL:

* `https://raw.githubusercontent.com/alvi-se/ai-ublock-blacklist/refs/heads/master/ublacklist.txt`

Two details are worth noticing because they are easy to get wrong. The uBlock list lives at list.txt on the master branch, while the uBlacklist list lives at ublacklist.txt under a refs/heads/master path, so the two URLs are not interchangeable. And both point at raw.githubusercontent.com, which means the list is fetched from GitHub on whatever schedule the blocker uses, and a fetch failure is a plausible outcome for anyone behind a network that blocks GitHub raw content.

The repository publishes both generated files at the top level, alongside src/ as the source of truth and schema.json, which tells you the shape of the source data.

## The JSON source format, and why the reason field matters

The repository stores the blocked sites in JSON format, all files in the ./src/ folder, and the layout has three parts.

The ./src/main.json file stores entries found randomly, not related to each other. The ./src/grouped/ folder stores sites grouped in different files, where sites on the same file have some kind of relationship such as the same source. The ./src/sheets/ folder stores sites imported by some Google Spreadsheets.

Each file has the same structure, with a name, a references array, and a sites array of objects:

```json
{
    "name": "<Name of the list>",
    "references": [
		"<Any kind of reference for the list>",
        "<Can be empty, as in the case of main.json>"
	],
    "sites": [
        {
            "site": "<site to block>",
            "reason": "<reason for being added here>",
            "references": []
        },
        {
            "site": "<another site to block>",
            "reason": "<reason for being added here>",
            "references": []
        }
    ]
}
```

Three fields, all mandatory, and the middle one is the interesting one. The site attribute contains the site to block. The reason attribute contains a string that will be shown in the page displayed when a page is blocked by uBlock Origin, and the readme says you can default it to AI slop but are welcome to add more information if necessary, for example malware. The references array is an array of strings that can store any external reference if needed, and it can be left empty.

That reason string is the entire editorial content of the project, and it is what a user sees when a page is blocked. It is a small design decision with a large effect on how the list reads in practice: a list that says only AI slop everywhere looks automated, and a list that says why was blocked looks like a person made a call.

## Adding a site by hand, and what the author says about automation

The readme covers two contribution routes. If you are not a technical user and do not know how GitHub works, you can report suspects by creating an issue. If you want to make a pull request, the readme walks through the file edit.

The first step is finding the scope of the AI spammer, which is usually a domain, although the author has also found a lot of Medium blogs and dev.to blogs. Those platforms should not be blocked as a whole, just the individual blog that is spamming. The example given is a site path such as example.com/@slopUser, added at the bottom of the sites array in ./src/main.json:

```jsonc
// ./src/main.json
{
    "name": "main",
    "references": [],
    "sites": [
        // ... Other sites
        {
            "site": "<last site before yours>",
            "reason": "AI slop",
            "references": []
        },  // Remember to add this comma
        // Here add your website
        {
            "site": "example.com/@slopUser",
            "reason": "AI slop",
            "references": []
        }   // No trailing comma!
    ]
}
```

The comments are the actual instruction: remember to add the comma to the previous entry, and no trailing comma on the last one.

The author also explains why entries are added manually rather than detected. It is hard for an algorithm to understand if a page is AI generated, especially given the guidelines that follow. An argument could be made that the list is useless because it is too short, but the answer is that these sites are doing SEO to appear first on search engines, so you meet the same website more than once, especially for related searches, and the author has found the list blocking websites from the very first day of writing it, even with very few entries.

If you find multiple related entries you can group them into a new file under ./src/grouped/, and if you really want to spend time you can research the site: most of these content farms are built by people or organisations who sell SEO and digital marketing services, so finding the source often leads to other farms by the same operator.

## Recognising a content farm by hand, and the limits of a personal list

The readme's section on how websites are added lists patterns the author has identified, with the caveat that they are not strict rules. The first and by the author's own account the easiest is an unnecessary introduction and conclusion, which is often annoyingly baroque, with the example of clicking a guide to a specific feature in Flutter.

The rest of the pattern list is cut off in the visible text, so what can be said from what is published is that the author works from a documented set of stylistic signals, and that the list is a product of human judgement applied to pages encountered while browsing.

Two limitations follow directly from that design. The first is coverage. A list built from one person's browsing history will miss the majority of content farms, and the author says so plainly, pointing out that since these sites are doing SEO they will resurface, and that the same few entries keep earning their place.

The second is bias, and the author names it before anyone else can: as an Italian citizen, you will find a lot of Italian websites in the list. The correction offered is the same as the rest of the project, that pull requests are welcome.

That combination, honest about its own bias and open to corrections, is the correct shape for this kind of artefact. It is a list of judgements, not a detection system, and treating it as anything else would be a mistake.

## Conclusion

This list fits a reader who is prepared to treat a personal judgement about website quality as a browsing preference, applied through a blocker they already run, and it does not fit someone who wants an objective detector of machine-written pages or a defence against a specific site. Before subscribing, look at the entries in src/main.json and src/grouped/ and the reasons attached to them, because the reason string is what a blocker shows you when it blocks a page and it is the only editorial signal the list carries.

## FAQ

### What is the AI uBlock Origin Blacklist?

It is a personal list for uBlock Origin and uBlacklist that blocks websites the author believes are entirely generated by AI, described as sites with no useful information, mediocre content, and ads and referral links. The stated reason is that such content is not checked by anyone before publication, so it can be actively misleading or dangerous.

### How do I subscribe to the ai-ublock-blacklist list?

In uBlock Origin, use the subscribe link in the readme or go to the Filter lists tab, Import..., and enter https://raw.githubusercontent.com/alvi-se/ai-ublock-blacklist/master/list.txt. In uBlacklist, use its subscribe link or add https://raw.githubusercontent.com/alvi-se/ai-ublock-blacklist/refs/heads/master/ublacklist.txt under Subscription.

### How do I add a website to the list?

Create a pull request that adds a new object at the bottom of the sites array in ./src/main.json, with the site, a reason string and a references array, remembering the comma on the previous entry and no trailing comma. If you are not comfortable with GitHub, the readme suggests reporting the site as an issue instead.

### Why does the list not use automated detection?

The author says it is hard for an algorithm to understand whether a page is AI generated, especially against the guidelines used. Entries are added manually as sites are encountered while browsing, and the author notes that even a short list keeps blocking sites because these content farms do SEO to rank first in search results.

### What bias does the ai-ublock-blacklist have?

The author states it plainly: because they are an Italian citizen, the list contains a lot of Italian websites. The correction offered is that pull requests from other contributors are welcome, and the site and grouped lists in src/ exist to group related entries and record their sources.

## Sources

- [alvi-se/ai-ublock-blacklist on GitHub](https://github.com/alvi-se/ai-ublock-blacklist)
- [Issues](https://github.com/alvi-se/ai-ublock-blacklist/issues)
- [License: GPL-3.0](https://github.com/alvi-se/ai-ublock-blacklist/blob/master/LICENSE)
- [Project website](https://subscribe.adblockplus.org/?location=https%3A%2F%2Fraw%2Egithubusercontent%2Ecom%2Falvi%2Dse%2Fai%2Dublock%2Dblacklist%2Fmaster%2Flist%2Etxt&title=AI%20Content%20Farms)
- [README](https://github.com/alvi-se/ai-ublock-blacklist/blob/master/README.md)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/alvi-se-ai-ublock-blacklist
