PHPackages                             bm1/file-noindex - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. bm1/file-noindex

ActiveTypo3-cms-extension[Utility &amp; Helpers](/categories/utility)

bm1/file-noindex
================

Exclude single files/images from search engines (Google Image Search) via a dynamically generated robots.txt - toggled per file in the file list.

1.1.0(1mo ago)03GPL-2.0-or-laterPHPPHP &gt;=8.2CI passing

Since Jun 12Pushed 1mo agoCompare

[ Source](https://github.com/BM1-de/file_noindex)[ Packagist](https://packagist.org/packages/bm1/file-noindex)[ Docs](https://github.com/BM1-de/file_noindex)[ RSS](/packages/bm1-file-noindex/feed)WikiDiscussions master Synced 1w ago

READMEChangelogDependencies (10)Versions (3)Used By (0)

File No-Index — exclude single files from search engines
========================================================

[](#file-no-index--exclude-single-files-from-search-engines)

[![CI](https://github.com/BM1-de/file_noindex/actions/workflows/ci.yml/badge.svg)](https://github.com/BM1-de/file_noindex/actions/workflows/ci.yml)[![Packagist](https://camo.githubusercontent.com/84876e2d26de771d467a5808e329b0a2572b69b007a3fbc6bebe68945dcdb38d/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f626d312f66696c652d6e6f696e646578)](https://packagist.org/packages/bm1/file-noindex)[![TER](https://camo.githubusercontent.com/ea249a49ed3aa65c08fb8e956e9f9ff3a10210c74f0c8b5a86a68b48fd13139e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5445522d66696c655f5f6e6f696e6465782d6f72616e6765)](https://extensions.typo3.org/extension/file_noindex)

TYPO3 extension `file_noindex` · Composer `bm1/file-noindex` · TYPO3 v13 + v14 · GPL-2.0-or-later

Editors can exclude **any file** (images of all kinds, PDFs, …) from search engine indexing directly in the **File list** module — one checkbox in the file metadata, no developer involved, no matter where the file is used.

The extension serves a dynamically generated `robots.txt` that contains `Disallow` entries for every marked file — the original file **plus** its processed variants (`csm_…`, `preview_…`). Blocking via robots.txt is the [way officially recommended by Google](https://developers.google.com/search/docs/crawling-indexing/prevent-images-on-your-page)to keep images out of Google Image Search.

Typical use case
----------------

[](#typical-use-case)

A person on a team photo asks not to appear in Google Image Search. Instead of touching templates or moving files, an editor opens the file's metadata, checks *"Do not index in search engines"*, saves — done. The next time crawlers fetch `robots.txt`, the file and all its rendered variants are disallowed.

Installation
------------

[](#installation)

### Composer mode

[](#composer-mode)

```
composer require bm1/file-noindex
```

### Classic mode

[](#classic-mode)

Install `file_noindex` from the TYPO3 Extension Repository (TER) via the Extension Manager.

After installation run a database schema update ("Analyze Database Structure" in the Maintenance module or `vendor/bin/typo3 database:updateschema`). No further configuration is needed.

Usage
-----

[](#usage)

1. Open the **File list** module and edit the metadata of a file (or open the file resource in the Media module).
2. Switch to the **SEO** tab, enable **"Do not index in search engines"**and save.

    [![The checkbox on the SEO tab of the file metadata form](Resources/Public/Screenshots/checkbox-file-metadata.png)](Resources/Public/Screenshots/checkbox-file-metadata.png)
3. `https://your-site.example/robots.txt` now contains the `Disallow`entries — immediately, no cache flush needed:

```
User-agent: *
# Files excluded from indexing (EXT:file_noindex)
Disallow: /fileadmin/team/group-photo.jpg
Disallow: /fileadmin/_processed_/9/0/csm_group-photo_a97a0b95c4.jpg
Disallow: /fileadmin/_processed_/*/csm_group-photo_*
Disallow: /fileadmin/_processed_/*/preview_group-photo_*
Disallow: /typo3/

```

Unchecking the box removes the entries just as immediately.

[![Generated robots.txt with disallow entries](Resources/Public/Screenshots/robots-txt.png)](Resources/Public/Screenshots/robots-txt.png)

How it works
------------

[](#how-it-works)

A PSR-15 middleware answers `GET /robots.txt` in the frontend stack — after site resolution, before TYPO3's static route resolver:

- **Base rules** are taken from the site configuration's `robots.txt`route (`type: staticText`), so your site config stays the single place to maintain them. Without such a route a minimal `User-agent: *` group is used.
- **Disallow entries** for all marked files are inserted into the last existing `User-agent: *` group (not appended as a duplicate group — not all parsers merge groups of the same name). Listed per file:
    1. the original file path,
    2. all currently existing processed variants (`sys_file_processedfile`),
    3. wildcard patterns (`csm__*`, `preview__*` inside the storage's processing folder) covering variants that will be generated in the future.
- Only files from **local, public** storages are listed. Renamed or moved files are reflected automatically on the next robots.txt request.
- The response is generated live on every request (`Cache-Control: public, max-age=3600`). robots.txt is requested rarely; one indexed query per request is uncritical and checkbox changes take effect immediately without any cache invalidation logic.

Limits — please read
--------------------

[](#limits--please-read)

- **No access protection.** The file stays reachable via direct link. robots.txt only affects crawlers that respect it (Google, Bing, …). If you need hard protection, look at [EXT:fal\_protect](https://extensions.typo3.org/extension/fal_protect).
- **Already indexed images** disappear only after the next crawl (days to weeks). For immediate removal additionally use Google Search Console → *Removals*.
- **Deliberate over-blocking by wildcards.** `csm_photo_*` also matches variants of a file named `photo_2.jpg`. When in doubt the extension blocks too much rather than too little.
- **Specific user-agent groups win.** If your robots.txt contains a more specific group such as `User-agent: Googlebot-Image`, that crawler ignores the `User-agent: *` group entirely — including our entries. In that case replicate the disallows in the specific group or remove it.
- **robots.txt size limit.** Google reads robots.txt only up to 500 KiB. With roughly three lines per file this allows thousands of marked files; if you get anywhere near that, reconsider your setup.
- **Multi-site installations sharing one fileadmin** list all marked files in the robots.txt of **every** site. Over-blocking across hosts is accepted in favour of a simple and robust v1.
- **Language-independent.** The checkbox lives on the default-language metadata record and applies to the file as such (`l10n_mode=exclude`).

Development
-----------

[](#development)

```
composer update
composer test:unit
typo3DatabaseDriver=pdo_sqlite composer test:functional
composer check:cs
composer check:phpstan
```

- Documentation:
- Issues and source: [https://github.com/BM1-de/file\_noindex](https://github.com/BM1-de/file_noindex)

License
-------

[](#license)

GPL-2.0-or-later, see [LICENSE](LICENSE).

###  Health Score

38

—

LowBetter than 83% of packages

Maintenance91

Actively maintained with recent releases

Popularity3

Limited adoption so far

Community2

Small or concentrated contributor base

Maturity47

Maturing project, gaining track record

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~0 days

Total

2

Last Release

45d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/5550674?v=4)[Phillip](/maintainers/bm1-phillip)[@bm1-phillip](https://github.com/bm1-phillip)

---

Tags

extensionseoTYPO3 CMSnoindexrobots.txtfalGoogle Image Search

###  Code Quality

Static AnalysisPHPStan

Code StylePHP CS Fixer

Type Coverage Yes

### Embed Badge

![Health badge](/badges/bm1-file-noindex/health.svg)

```
[![Health](https://phpackages.com/badges/bm1-file-noindex/health.svg)](https://phpackages.com/packages/bm1-file-noindex)
```

###  Alternatives

[brotkrueml/schema

Embedding schema.org vocabulary - API and view helpers for schema.org markup

34653.7k18](/packages/brotkrueml-schema)[friendsoftypo3/content-blocks

TYPO3 CMS Content Blocks - Content Types API | Define reusable components via YAML

103519.9k57](/packages/friendsoftypo3-content-blocks)[yoast-seo-for-typo3/yoast_seo

Yoast SEO for TYPO3

511.7M9](/packages/yoast-seo-for-typo3-yoast-seo)[wazum/sluggi

TYPO3 extension for URL slug management with inline editing, auto-sync, locking, access control, and redirects

40529.5k](/packages/wazum-sluggi)[clickstorm/cs-seo

\[clickstorm\] SEO - Extension for TYPO3. Enables important onpage features for search engine optimization (SEO). Expands the page settings and any desired records for example with a preview for Google search results (SERP) Structured Data (JSON-LD) and a Focus Keyword. Restrictive hreflang and canonical tags. Modules for metadata of records and alternative texts of images. Further features are shown in the extension manual.

36527.0k1](/packages/clickstorm-cs-seo)[mfd/ai-filemetadata

Automatically generates FAL metadata for files by means of public LLMs

1355.0k](/packages/mfd-ai-filemetadata)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
