91호. 사이트맵 자동으로 생성하기 free

2019-12-10

안녕하세요. 오늘은 오랜만에 라라벨 패키지를 하나 들고 왔어요. 바로 사이트맵 자동 생성기입니다.



지난 일주일간 PHP 7.4에 새로 추가된 기능을 소개해드렸는데요. 이를 위해 계속 PHP 7.4를 검색했는데, 어느 순간 보니 xly.kr에 올려 둔 1일 1식 라라벨 컨텐트는 하나도 검색되지 않고 있더라고요. 구글 검색에 등록을 해놨는데 그것 만으로는 부족했나봅니다.


그래서 구글이 요구하는 사이트맵을 추가하기로 했습니다. 어디 편하게 하는 방법이 없나 찾아보니 여윽시나 스파티에서 사이트맵을 자동으로 만들어주는 패키지(spatie/laravel-sitemap)를 제공하고 있더군요.


이 패키지는 2016년에 공개되었는데, 당시에도 이미 사이트맵 패키지가 여럿 있었지만 다들 수동으로 링크를 적어줘야 했어서 자동으로 사이트맵을 만들었다고 합니다.


SitemapGenerator::create('https://example.com')->writeToFile($path);

패키지를 설치한 후 위와 같이 한 줄만 적어주면 자동으로 크롤링해서 사이트맵 파일을 만들어 줍니다.


아티즌 커맨드로 만들어 쓰면 되겠죠.


namespace App\Console\Commands;

use Illuminate\Console\Command;
use Spatie\Sitemap\SitemapGenerator;

class GenerateSitemap extends Command
{
/**
* The console command name.
*
* @var string
*/
protected $signature = 'sitemap:generate';

/**
* The console command description.
*
* @var string
*/
protected $description = 'Generate the sitemap.';

/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
// modify this to your own needs
SitemapGenerator::create(config('app.url'))
->writeToFile(public_path('sitemap.xml'));
}
}

사이트맵을 직접 갱신하는 건 매우 성가신 일입니다. 라라벨의 스케쥴 기능을 이용하면 자동으로 갱신할 수 있어 편합니다.


// app/Console/Kernel.php
protected function schedule(Schedule $schedule)
{
...
$schedule->command('sitemap:generate')->daily();
...
}

만일 자동으로만 생성하고 수동으로 생성할 일이 없다면 아래와 같이 아티즌 커맨드를 만들 필요없이 스케쥴에서 바로 생성할 수도 있겠죠.


protected function schedule(Schedule $schedule)
{
$schedule->call(function() {
SitemapGenerator::create('https://example.com')->writeToFile($path);
})->daily();
}

이 패키지는 사이트맵 파일을 세밀하게 설정해서 만들 수 있도록 여러가지 옵션을 제공합니다. 기본으로 생성된 사이트맵 파일이 뭔가 부족하다고 생각되시면 공식 문서에서 옵션을 확인해보세요.


저는 로컬에서 제대로 사이트맵 파일이 생성되는 것 까지는 확인을 했는데, 배포를 하려고 보니 Vapor가 서버리스라서 일반적인 방법으로는 안되더라고요. 조만간 문제가 해결되면 한 번 정리해서 말씀드리겠습니다.


오늘도 즐거운 하루 되세요!


1일 1식 라라벨 91호

2019년 12월 10일


이현석

메쉬 코리아 개발자. 바쁜 팀장님 대신 알려주는 신입 PHP 개발자 안내서를 쓰고, 클린 아키텍처 인 PHP를 번역했습니다. 2020년에 출간될 Laravel Up & Running 2nd Edition을 번역하고 있습니다.