19
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[laravel]サイトマップ(sitemap.xml)の作成方法

Last updated at Posted at 2018-01-28

業務でサイトマップを生成したので忘れない内に投稿しておきます。

サイトマップとは?

サイトマップには二通りあります。
一つはサイトを訪れたユーザーの為にどこに何があるのか記載しているwebページ。
もう一つは検索エンジンがサイト内のURLを集めるための手がかりとなるsitemap.xml。

今回はsitemap.xmlの生成方法を投稿します。
ちなみにlaravelのバージョンは5.4です。

##Let's 生成!
https://github.com/Laravelium/laravel-sitemap
↑こちらを参考にしながら生成していきます。

composer.json
    "require": {
        "php": ">=5.6.4",
        "laravel/framework": "5.4.*",
        "laravel/tinker": "~1.0",
        "monolog/monolog": ">=1.0.0",
        "roumen/sitemap": "2.6.*"
         // 新しく"roumen/sitemap": "2.6.*"を追加
    },

app.php
'providers' => [
  Roumen\Sitemap\SitemapServiceProvider::class
  //新しくRoumen\Sitemap\SitemapServiceProvider::classを追加
]

以上のコードを書いたら一旦コマンドを打ちましょう。

php artisan vendor:publish --provider="Roumen\Sitemap\SitemapServiceProvider"
  • 私の場合はコマンドを打った際にエラーが出てしまいました。そういった場合は焦らずcomposer updateを打ちましょう。

artisanコマンドを打つと以下のファイルパスがコピーされたと思います。

Copied File [/vendor/roumen/sitemap/src/config/config.php] To [/config/sitemap.php]
Copied Directory [/vendor/roumen/sitemap/src/views] To [/resources/views/vendor/sitemap]
Copied Directory [/vendor/roumen/sitemap/src/public] To [/public/vendor/sitemap]

以上の処理が終了したらcomposer updateを打ちましょう

composer update

それではルーティングに移りましょう。
###ルーティング
https://github.com/Laravelium/laravel-sitemap
のExamplesにある"How to generate sitemap to a file"にサイトマップの生成方法が記載されていました。

Route::get('mysitemap', function(){

    // create new sitemap object
    $sitemap = App::make("sitemap");

    // add items to the sitemap (url, date, priority, freq)
    $sitemap->add(URL::to(), '2012-08-25T20:10:00+02:00', '1.0', 'daily');
    $sitemap->add(URL::to('page'), '2012-08-26T12:30:00+02:00', '0.9', 'monthly');

    // get all posts from db
    $posts = DB::table('posts')->orderBy('created_at', 'desc')->get();

    // add every post to the sitemap
    foreach ($posts as $post)
    {
        $sitemap->add($post->slug, $post->modified, $post->priority, $post->freq);
    }

    // generate your sitemap (format, filename)
    $sitemap->store('xml', 'mysitemap');
    // this will generate file mysitemap.xml to your public folder

});

自分のサービスに合わせてweb.phpにこのまま記載すればおそらく動くと思います(自分は動きました)
ですが、web.phpにルーティング処理以外のことを書くのも何か違和感があるので処理をコントローラーに分けます。

###コントローラー + ルーティング

コントローラー
SiteMapController
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Roumen\Sitemap\SitemapServiceProvider;
use Carbon\Carbon;


class siteMapController extends Controller
{

  public function sitemap(){
    // create new sitemap object
    $sitemap = \App::make("sitemap");
    $now = Carbon::now();
    // add items to the sitemap (url, date, priority, freq)
    $sitemap->add(\URL::to('/home'), $now, '1.0', 'daily');
    // \URL::to('/home')はweb.phpでトップページに指定したURL + α をaddメソッドで指定している。
        // \URL::to('/')ならトップページに移動。
    $sitemap->add(URL::to('/home/event'), $now, '0.9', 'weekly');

    // generate your sitemap (format, filename)
    $sitemap->store('xml', 'sitemap');
    // this will generate file mysitemap.xml to your public folder
    // return $sitemap->render('xml');ならばhttps://トップページ/sitemapにアクセスすれば
    // サイトマップページに飛ぶことが出来る。
  }
}


AppとURLの後ろにバックスラッシュをつけることを忘れないようにしましょう。エラーが出ます。

ルーティング
web.php
Route::get('sitemap', 'SiteMapController@sitemap');

以上のコードを記載したら"https://トップページ/sitemap"にアクセスしてみましょう。
するとsitemap.xmlが出来上がっているはずです。

19
25
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?