PHPackages                             awcodes/botly - 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. awcodes/botly

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

awcodes/botly
=============

Botly is a Filament plugin to manage your site's robots.txt file directly from a Filament admin panel.

v1.0.4(1mo ago)5504↑270%1[1 issues](https://github.com/awcodes/botly/issues)MITPHPPHP ^8.2CI passing

Since Mar 5Pushed 1mo agoCompare

[ Source](https://github.com/awcodes/botly)[ Packagist](https://packagist.org/packages/awcodes/botly)[ Docs](https://github.com/awcodes/botly)[ GitHub Sponsors](https://github.com/awcodes)[ RSS](/packages/awcodes-botly/feed)WikiDiscussions 1.x Synced 3w ago

READMEChangelog (5)Dependencies (24)Versions (8)Used By (0)

Botly
=====

[](#botly)

Botly is a Filament plugin to manage your site's `robots.txt` file directly from the Filament admin panel. Rules, sitemaps, and AI crawler blocks are stored in the database and served dynamically — no static file required.

[![Latest Version](https://camo.githubusercontent.com/8d804fe936d178df37bff887045fec45542a96a412061edad8d4ae70735c181a/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f72656c656173652f6177636f6465732f626f746c792e7376673f7374796c653d666c61742d73717561726526636f6c6f723d626c7565266c6162656c3d52656c65617365)](https://github.com/awcodes/botly/releases)[![MIT Licensed](https://camo.githubusercontent.com/a7e65aee57b11d28e4caff8b945729a66be0bb663f7f93bd24c5aa65699f148e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d626c75652e7376673f7374796c653d666c61742d737175617265)](LICENSE.md)[![Total Downloads](https://camo.githubusercontent.com/f17b6db424f1467eb71a12431637e00ef596c7bdd1222b537b2f7dc34bf4586b/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f6177636f6465732f626f746c792e7376673f7374796c653d666c61742d73717561726526636f6c6f723d626c7565266c6162656c3d446f776e6c6f616473)](https://packagist.org/packages/awcodes/botly)[![GitHub Repo stars](https://camo.githubusercontent.com/a2bc41a2af848d0a90838cf2a5411717502de7a3b7bba6e6f36bb90e5327a835/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f73746172732f6177636f6465732f626f746c793f7374796c653d666c61742d73717561726526636f6c6f723d626c7565266c6162656c3d5374617273)](https://github.com/awcodes/botly/stargazers)[![Filament Version](https://camo.githubusercontent.com/1145258bf11f38b7a617bf7232b2806dd048df634baf65b979264720e1276a29/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f46696c616d656e742d342e782d6439373730362e7376673f7374796c653d666c61742d737175617265)](https://filamentphp.com/docs/4.x/panels/installation)[![Filament Version](https://camo.githubusercontent.com/bbef05c33db7b3cdd06be3d93caf852efe0c0214a421c03afba376ab9793200a/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f46696c616d656e742d352e782d6439373730362e7376673f7374796c653d666c61742d737175617265)](https://filamentphp.com/docs/5.x/panels/installation)

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

[](#installation)

Install the package via Composer:

```
composer require awcodes/botly
```

Run the installation command to publish migrations and run them:

```
php artisan botly:install
```

Or publish and run the migration manually:

```
php artisan vendor:publish --tag="botly-migrations"
php artisan migrate
```

Optionally publish the config file:

```
php artisan vendor:publish --tag="botly-config"
```

Setup
-----

[](#setup)

Register the plugin in your Filament panel provider:

```
use Awcodes\Botly\BotlyPlugin;

$panel->plugins([
    BotlyPlugin::make(),
]);
```

That's it. Botly registers a **Robots Manager** page in your panel and automatically serves `/robots.txt` via a dynamic route.

How It Works
------------

[](#how-it-works)

Botly stores your robots configuration in the database. When `/robots.txt` is requested, the rules are read from the database and formatted as valid `robots.txt` output on the fly. You can also export the current configuration to a static `public/robots.txt` file using the **Export Robots.txt** button on the admin page.

Important

If a static `public/robots.txt` file already exists, Botly will display a warning in the admin UI. The file must be deleted or renamed before the dynamic route can take effect.

Configuration
-------------

[](#configuration)

The published config file (`config/botly.php`) allows you to set default values that are used when no database record exists yet:

```
return [
    'defaults' => [
        'rules' => [],
        'sitemaps' => [],
        'ai_crawlers' => [],
    ],
    'persistent_rules' => [],
];
```

### Persistent Rules

[](#persistent-rules)

Persistent rules are rules that are always included in the output and cannot be edited or deleted from the admin UI. You can define them in the config file or fluently on the plugin:

**Via config:**

```
// config/botly.php
'persistent_rules' => [
    [
        'user_agent' => '*',
        'directive' => 'disallow',
        'path' => '/admin',
    ],
],
```

**Via plugin:**

```
BotlyPlugin::make()
    ->persistentRules([
        [
            'user_agent' => '*',
            'directive' => 'disallow',
            'path' => '/admin',
        ],
    ]),
```

Each rule is an array with three keys:

KeyValues`user_agent`Any string, e.g. `*`, `Googlebot``directive``allow`, `disallow`, `crawl-delay`, `clean-param``path`The path to allow or disallow, e.g. `/admin`Customization
-------------

[](#customization)

### Authorization

[](#authorization)

By default, all users with access to your Filament panel can visit the Botly page. You can restrict access by passing a boolean or a closure to `authorize()`:

```
// Always deny access
BotlyPlugin::make()
    ->authorize(false),

// Conditionally allow access
BotlyPlugin::make()
    ->authorize(fn () => auth()->user()->isAdmin()),
```

### Navigation

[](#navigation)

```
BotlyPlugin::make()
    ->navigationIcon('heroicon-o-robot')
    ->navigationGroup('Settings')
    ->navigationLabel('Robots.txt'),
```

### Page

[](#page)

```
BotlyPlugin::make()
    ->title('Robots Manager')
    ->slug('robots-manager'),
```

AI Crawler Blocking
-------------------

[](#ai-crawler-blocking)

The admin page includes a **Block AI Crawlers** checkbox list. Selecting crawlers will add `Disallow: /` entries for each one in the output. Botly ships with a curated list of known AI crawlers including GPTBot, ClaudeBot, PerplexityBot, and more.

Testing
-------

[](#testing)

```
composer test
```

Contributing
------------

[](#contributing)

Please see [CONTRIBUTING](.github/CONTRIBUTING.md) for details.

Security Vulnerabilities
------------------------

[](#security-vulnerabilities)

Please review [our security policy](.github/SECURITY.md) on how to report security vulnerabilities.

Credits
-------

[](#credits)

- [Adam Weston](https://github.com/awcodes)
- [All Contributors](../../contributors)

License
-------

[](#license)

The MIT License (MIT). Please see [License File](LICENSE.md) for more information.

###  Health Score

46

—

FairBetter than 92% of packages

Maintenance87

Actively maintained with recent releases

Popularity24

Limited adoption so far

Community10

Small or concentrated contributor base

Maturity51

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 82.6% of commits — single point of failure

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 ~13 days

Total

6

Last Release

42d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/3596800?v=4)[Adam Weston](/maintainers/awcodes)[@awcodes](https://github.com/awcodes)

---

Top Contributors

[![awcodes](https://avatars.githubusercontent.com/u/3596800?v=4)](https://github.com/awcodes "awcodes (19 commits)")[![dependabot[bot]](https://avatars.githubusercontent.com/in/29110?v=4)](https://github.com/dependabot[bot] "dependabot[bot] (3 commits)")[![github-actions[bot]](https://avatars.githubusercontent.com/in/15368?v=4)](https://github.com/github-actions[bot] "github-actions[bot] (1 commits)")

---

Tags

filamentfilament-pluginlaravelrobotsfilamentrobots.txtawcodesbotly

###  Code Quality

TestsPest

Static AnalysisPHPStan, Rector

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/awcodes-botly/health.svg)

```
[![Health](https://phpackages.com/badges/awcodes-botly/health.svg)](https://phpackages.com/packages/awcodes-botly)
```

###  Alternatives

[ysfkaya/filament-phone-input

A phone input component for Laravel Filament

3141.2M25](/packages/ysfkaya-filament-phone-input)[rawilk/profile-filament-plugin

Profile &amp; MFA starter kit for filament.

3913.7k](/packages/rawilk-profile-filament-plugin)[dotswan/filament-map-picker

Easily pick and retrieve geo-coordinates using a map-based interface in your Filament applications.

128173.7k3](/packages/dotswan-filament-map-picker)[stephenjude/filament-feature-flags

Filament implementation of feature flags and segmentation with Laravel Pennant.

122157.7k1](/packages/stephenjude-filament-feature-flags)[creagia/filament-code-field

A Filamentphp input field to edit or view code data.

57301.3k3](/packages/creagia-filament-code-field)[jibaymcs/filament-tour

Bring the power of DriverJs to your Filament panels and start a tour !

12451.0k](/packages/jibaymcs-filament-tour)

PHPackages © 2026

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