登録日:
2025-03-17
最終更新日:
2025-03-21
Laravel で robots.txt を出力する方法について
Laravel で robots.txt を動的に出力する方法がいくつかありますので紹介します。
ルーティングを利用して robots.txt を生成する方法
Laravel のルーティングを利用して robots.txt を動的に生成する方法です。
ルートを定義
routes/web.php に以下を追加します。
use Illuminate\Support\Facades\Route;
use Illuminate\Http\Response;
Route::get('/robots.txt', function () {
$content = "User-agent: *".PHP_EOL;
$content .= "Disallow: /example/".PHP_EOL;
return response($content)
->header('Content-Type', 'text/plain');
});
これで robots.txt が /robots.txt にアクセスした際に表示されます。
ビューを利用して robots.txt を生成する方法
ビューを使って robots.txt を出力する方法です。
ルートを定義
routes/web.php に以下を追加
Route::get('/robots.txt', function () {
return response()->view('robots')
->header('Content-Type', 'text/plain');
});
ビューファイルを作成
resources/views/robots.blade.php を作成し、以下を記述します。
User-agent: *
Disallow: /example/
@php
if (config('app.env') !== 'production') {
echo "Disallow: /\n";
}
@endphp
メリット
- 環境 (.env の APP_ENV) に応じて robots.txt の内容を変えられる。
- robots.blade.php を編集するだけで簡単に変更できる。
コントローラーとビューを利用して robots.txt を生成する方法
複数の sitemap.xml などの定義を動的に出力する方法です。
URL の階層が動的に変化したりする場合に有効な方法です。
ルートを定義
routes/web.php に以下を追加します。
use App\Http\Controllers\RobotsTxtController;
Route::get('/robots.txt', [RobotsTxtController::class,'robotsTxt'])
->name('robotsTxt');
コントローラを定義
app\Http\Controllers\RobotsTxtController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class RobotsTxtController extends Controller
{
public static function robotsTxt() : object
{
return response()->view('robotsTxt')
->header('Content-Type', 'text/plain');
}
}
ビューを定義 resources/views/robotsTxt.blade.php
User-agent: *
Disallow: /example
Sitemap: {{ url('/sitemap.xml') }}
静的ファイルを直接配置
単に public/robots.txt にファイルを置くだけでも動作しますが、動的な管理ができなくなります。
public/robots.txt を作成
User-agent: *
Disallow: /admin/
メリット:
- 最もシンプルな方法
- Laravelのルーティングを通さずに直接アクセス可能
- キャッシュ問題が発生しにくい
デメリット:
- 環境ごとの制御ができない
- robots.txt を変更するたびにサーバーへアップロードが必要
表示確認
以下のURLを入力すると robots.txt が表示されてば Ok です。
http(s)://{各サイトのドメイン}/robots.txt