정보공유 게시판
icon  
모임장
   정보공유   03-11 13:25 276

PHP Laravel 에서 사이트맵을 생성하는 간단한 방법


PHP Laravel 에서 사이트맵을 생성하는 간단한 방법

 

 

 

저와 같이 라라벨로 웹사이트를 만드신 분들

반갑습니다

 

 

구글이나 빙 등, 검색 포털 사이트에 나의 웹사이트를 공개하려면

 

사이트맵을 반쯤 필수적으로 등록해야합니다

 

 

글을 등록할 때마다 직접 색인을 해주는 방법도 있지만

 

글 작성이 빈번하게 일어나는 경우에는 너무 번거롭겠죠?

 

뭐 직접 프로젝트를 성공적으로 완성하신 분들이라면 당연히 아시겠지만...

 

 

사이트맵을 만들어주는 생성 사이트도 여럿 있지만

 

또 서버의 프로젝트 폴더로 옮겨줘야하니

 

매우 귀찮은 작업을

 

그나마 쉽게할 수 있는 방법을 공유합니다.

 

 

1. spatie의 sitemap generator 패키지를 설치

composer require spatie/laravel-sitemap

 

그리도 동시에 config도 생성 해줍니다

php artisan vendor:publish --provider="Spatie\Sitemap\SitemapServiceProvider" --tag=sitemap-config

 

config에서 사실 특별히 수정할 내용을 없으실 겁니다

 

2. 라라벨 Command 생성

php artisan make:command GenerateSitemap

 

커맨드 생성 후 아래와 같이 작성 해주세요

<?php

namespace App\Console\Commands;
use Spatie\Sitemap\Sitemap;

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

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Command description';

    /**
     * Execute the console command.
     *
     * @return int
     */
    public function handle()
    {
        $sitemap = Sitemap::create();

        $sitemap->writeToFile(public_path('sitemap.xml'));
        return Command::SUCCESS;
    }
}

 

해당 코드에서 signature 부분은 php artisan 명령어를 실행할 커맨드를 지정해줍니다

 

예를 들어서 이제 터미널에

 

php artisna generate:sitemap 이라고 작성하면

 

해당 코드가 실행이 되게 됩니다

 

 

3. .env 파일에서 APP_URL 수정

자신의 도메인을 작성하거나 로컬에서 테스트하신다면 localhost:포트 를 작성해주시면 됩니다

 

sitemap을 create할 시 .env의 APP_URL을 기준으로 URL이 작성되기 떄문이에요

 

 

4. handle 작성

먼저 model 객체를 use로 가져옵니다

use App\Models\board;

 

예시로 board라는 이름의 게시글을 저장하는 모델을 가져왔습니다

 

그리고 handel 코드를 아래와 같이 작성 해봅니다

public function handle()
    {
        $sitemap = Sitemap::create();

        #root 페이지
        $sitemap->add('/');

        #모든 게시글 가져오기
        $boards = board::all();
        
        #자신이 설정한 URL 구성대로 값들을 넣어줍니다
        foreach ($boards as $board) {
            $sitemap->add("/read/{$board->board_category}/{$board->board_id}");
        }

        #사이트맵 파일 생성
        $sitemap->writeToFile(public_path('sitemap.xml'));
        return Command::SUCCESS;
    }

 

 

이렇게 하지 않고도 localhost에서 자동으로 모든 URL을 스캔해주는 경우도 있지만

 

SSL을 적용하거나 실제 서버 환경에 따라서 생성이 정상적으로 되지 않는 경우가 발생할 수 있습니다

 

그리고 생성해주는 사이트를 이용해서 생성하게되면

 

원하지 않는 페이지들이나 redirect가 포함된 페이지들도 포함되기에

 

 

원하는 페이지들에 대해서만 사이트맵을 작성할 수 있는 이 방법이

 

제 생각에는 가장 좋은 것 같습니다

0 0
0 개의 댓글
icon