장고(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: