Django 내부에서 Sitemap 도구를 이용해 Sitemap.xml 생성하기
Nov. 8, 2021, 10:59 p.m.
사이트를 만든다음 네이버 서치 어드바이저나 구글 서치 콘솔과 같은 곳에 등록을 하게 되는데요, 이때 사이트맵을 등록해주면 검색엔진측에서 사이트의 링크들을 더욱 쉽게 색인 할 수 있습니다. 사이트맵을 만드는 방법도 여러가지가 있는데요, 이번 포스트에서는 Django의 자체 기능을 이용해 사이트맵을 생성하는 방법을 알아보겠습니다.
1. 모델 준비하기
사이트맵은 모델 기반으로 만들어집니다. CBV로 개발할 때 각 페이지가 Django의 ListView나 DetailView로 이루어져있다면 쉽게 이를 바탕으로 사이트맵을 생성할 수 있습니다.
예를 들어 블로그 사이트를 만든다면 아래와 같이 Post 모델을 생성할 수 있겠네요.
class Post(models.Model):
title = models.CharField(max_length=100)
content = models.CharField()
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def get_absolute_url(self):
return f'/blog/{self.pk}/'
여기서 중요한것은 get_absolute_url() 메서드 입니다. Django에서는 모델의 링크를 얻어올 때 get_absolute_url() 함수를 사용할 것을 권장하고 있습니다. 이는 장고의 여러 기능에서 쉽게 응용하기 위해서인데요, 사이트맵을 생성할 때도 이 메서드를 사용합니다.
get_absolute_url()이 포함된 모델을 만들었다면 다음으로 넘어가겠습니다.
2. Views.py 변경하기
Post 모델이 사용되는 앱의 Views.py에 들어가서 아래와 같은 클래스를 추가해줍니다.
-views.py-
from .models import Post
from django.contrib.sitemaps import Sitemap
...
class BlogSitemap(Sitemap):
changefreq = "monthly"
priority = 0.5
def items(self):
return Post.objects.all()
이때 changefreq와 priority는 재량껏 설정해 주시면 됩니다. 수정하지 않아도 무방합니다.
3. urls.py 수정하기
마지막으로 example.com/sitemap.xml에 접속했을 때 사이트맵이 출력되도록 urls.py를 수정하겠습니다.
아래의 내용을 루트 디렉터리를 설정하는 urls.py에 추가해주세요.
-urls.py-
from django.contrib.sitemaps.views import sitemap
from blog.views import BlogSitemap
...
sitemaps = {'blog': BlogSitemap}
...
urlpatterns = [
...
path('sitemap.xml', sitemap, {'sitemaps': sitemaps}, name='django.contrib.sitemaps.views.sitemap'),
...
]
이전에 만들어준 사이트맵 클래스를 import 해주고 sitemaps 딕셔너리를 만듭니다. 이때 여러 모델의 사이트맵 클래스를 만들었다면 이 딕셔너리에 더 추가해주면 됩니다.
urlpatterns에 path()를 이용해 sitemap.xml에 접속하면 사이트맵이 나오도록 설정해줍니다.
설정이 완료되었다면 서버를 실행하고 접속해보세요.
이런식으로 xml 파일이 출력되면 완성입니다!
Django Sitemap