장고(Django)로 웹사이트를 만들고 난 후 구글 서치콘솔(Google Search Console), 네이버 웹마스터도구에 사이트맵을 등록해줘야 합니다. 이는 기본적으로 웹마스터 도구를 운영하는 회사에서 권장하는 방식입니다. 블로그 같은 경...

[Python/ Django] 장고 사이트맵 (sitemap.xml) 생성 방법


장고(Django)로 웹사이트를 만들고 난 후 구글 서치콘솔(Google Search Console), 네이버 웹마스터도구에 사이트맵을 등록해줘야 합니다. 이는 기본적으로 웹마스터 도구를 운영하는 회사에서 권장하는 방식입니다.

블로그 같은 경우는 자신의 URL 뒤에 'sitemap.xml'을 붙이면 그만이지만 (Ex. https://surfinryu.blogspot.com/sitemap.xml) 장고의 경우에는 따로 설정해줘야 하는 부분이 있습니다. 오늘은 사이트맵 생성 방법에 대해 알아보겠습니다.

먼저 제반설정 혹은 필요사항에 대해 알려드립니다.
  • 작업 폴더는 앱 폴더가 아닌 기본 파일 폴더입니다. (Ex. mysite, base 등) 
  • 많은 장고 튜토리얼에서는 poll, blog 앱을 생성하는 것을 알려줍니다. Blog App 생성 튜토리얼 중 blog내 models.py에서 reverse 함수를 사용해야 합니다. (아래 사진 참조)


▲reverse 함수를 사용해야 sitemaps.py에서 url 생성이 가능


1. settings.py 설정


1-1. INSTALLED_APPS = [] 사이에 사진과 같은 값을 넣어줍니다.

#Sitemap
 'django.contrib.sites',
 'django.contrib.sitemaps',

1-2. INSTALLED_APPS = [] 아래에 'SITE_ID = 1' 을 추가해줍니다.

#Sitemap
    SITE_ID = 1


2. sitemap.py 설정


먼저 위에 사진을 설명해드리면, 1-2줄은 settings에서 등록한 sitemaps를 불러오고, url 생성을 위한 reverse 함수를 불러옵니다. 이후 클래스는 각 앱의 models에서 정의한 함수를 불러오고, 그에 맞는 url 생성 클래스를 작성합니다.

2-1. mysite 폴더에 sitemaps.py를 생성합니다.

2-2.
from django.contrib.sitemaps import Sitemap
from django.urls import reverse

2-3. 생성한 앱에 맞는 sitemap 클래스를 생성해줍니다.
저는 posts라는 앱과 products라는 앱을 생성하였고, 이때 각 models.py에서 Ardexpost, Product 라고 클래스를 정의하였습니다. 예시로 Products 앱을 등록하는 걸로 하고 진행해보겠습니다. (위에 제반설정에 말씀드린 것과 같이 Products 앱에는 url 정의를 받아오는 reverse 함수를 사용하여 작성하였습니다.)

     class ProductSitemap(Sitemap):
         def items(self):
             return Product.objects.all()


2-4. (선택사항) 만약 어플리케이션을 만들지 않고 단일 html 파일을 만들고 static 파일에 저장하신 경우, static sites 역시 등록이 가능합니다. 예시로 'about-us'라는 사이트를 만들었다고 가정합니다.

     class StaticViewSitemap(Sitemap):
         def items(self):
             return ['about-us']
         def location(self, item):
             return reverse(item)


3. urls.py 설정


3-1. Sitemaps.py에 작성한 클래스를 등록해줍니다. 저희는 예시로 ProductSitemap을 등록하셨던 것 아시죠?

from mysite.sitemaps import ProductSitemap
from django.contrib.sitemaps.views import sitemap

3-2. (2-4.를 진행한 경우) about-us 사이트를 등록한 경우에는 다음과 같이 추가 작성해주세요. 저 같은 경우에는 mysite가 기본 폴더이기에 mysite.views에 mysite_views라고 생성하였습니다.

from mysite import views as mysite_views
from mysite.sitemaps import StaticViewSitemap

3-3. sitemaps = {} 안에 생성한 클래스를 적어줍니다. (static을 생성하지 않으신 분은 3번째 줄을 삭제해주세요.)

sitemaps = {
    'products': ProductSitemap,
    'static': StaticViewStitemap,
}

3-4. urlpatterns = []에 다음과 같이 넣어줍니다.

path('sitemap.xml', sitemap, {'sitemaps': sitemaps}),

3-5. (선택사항) static을 넣으신 경우에는 사이트 주소를 추가해줍니다.

path('assets/sites/about-us.html', mysite_views.about, name='about-us'),


4. (선택사항) views.py 설정
StaticViewSitemap을 설정하신 경우만 진행해주세요.


4-1. Static sites를 생성하신 경우에는 views에 따로 정의를 해줘야 합니다.

def about(request):
    return render(request, 'static/sites/about-us.html') 


5. admin에서 사이트 주소 변경

python3 manage.py makemigrations product
python3 manage.py migrate
python3 manage.py runserver

admin으로 들어가면 아래와 같이 'SITES'라고 생성된 것을 확인하실 수 있습니다. 이곳에서 등록할 도메인을 작성하시고 저장하시면 됩니다.
이후 http://도메인.co.kr/sitemap.xml을 주소창에 넣으시면 사이트 맵이 정상적으로 생성된 것을 확인하실 수 있습니다.



▲ 사이트맵 생성 완료


도움이 되셨기를 바랍니다 🙇‍♀️
감사합니다.



0 Comments: