django 網站地圖 sitemap

娃哈哈店長發表於2020-01-07
  • 網站地圖是根據網站的結構、框架、內容,生成的導航網頁,是一個網站所有連結的容器。

  • 網站地圖可以方便搜尋引擎或者網路蜘蛛抓取網站頁面,增加網站內容頁面的收錄機率。

1、新增sitemap地圖應用

新增django.contrib.sitemaps到installed_apps

2、定製地圖成員

新增django -> blog -> sitemaps.py


# -*- coding: utf-8 -*-

from django.contrib.sitemaps import Sitemap

from .models import Article, Category

from django.db.models.aggregates import Count

# 文章聚類

class ArticleSitemap(Sitemap):

    changefreq = 'weekly'

    priority = 1.0

    def items(self):

        return Article.objects.all()

    def lastmod(self, obj):

        return obj.update_date

# 分類聚類

class CategorySitemap(Sitemap):

    changefreq = 'weekly'

    priority = 0.8

    def items(self):

        return Category.objects.annotate(total_num=Count('article')).filter(total_num__gt=0)

    def lastmod(self, obj):

        return obj.article_set.first().create_date

這裡從 Sitemap 類繼承一個類,實現 items 方法,該方法返回所有要加入 Sitemap 的資料,屬性changefreq、priority 和方法 location、lastmod 分別對應 Sitemap 標準 xml 文件中的相應欄位。

changfreq:取值範圍為:always、hourly、daily、weekly、monthly、yearly、never,可根據實際情況進行設定

priority:取值範圍為0.4-1.0,如果不設定則預設值為0.5

location:用於定製地圖項的url。如果不實現該方法,則必須實現地圖對應model的get_absolute_url方法,實現該方法後則會優先採用該方法返回的url:

def location(self, obj):

return “/tag/%s/” % obj.name

要增加多個地圖成員,繼承多個Sitemap,分別實現即可。

如果未提供location,框架將呼叫items()返回的每個物件上的get_absolute_url()方法。

該屬性最終反映到HTML頁面上的標籤。

3、配置路由

新增程式碼到django_blog->django_blog->urls.py


#網站地圖

from django.contrib.sitemaps.views import sitemap

from apps.blog.sitemaps import ArticleSitemap, CategorySitemap

#網站地圖

sitemaps = {

    'articles': ArticleSitemap,

    'categories': CategorySitemap

}

urlpatterns = [

    path('admin/', admin.site.urls),

    path('mdeditor/', include('mdeditor.urls')),  # Django-mdeditor URLS

     # index

    path('', include('apps.blog.urls'), name='blog'),  

    #使用者

    path('accounts/', include('apps.user.urls'), name='accounts'),

    #評論

    path('comment/', include('apps.comment.urls'), name = 'comment'),

    #工具

    path('md2html/', blog_views.md2html, name='markdown'),

    #網站地圖

    path('sitemap.xml', sitemap, {'sitemaps':sitemaps}, name = 'django.contrib.sitemaps.views.sitemap'),

]

4、新增網站地圖

在頁尾新增如下程式碼即可

<a href="/sitemap.xml" title="Sitemap" target="_blank">Sitemap</a>

5、點選新增的sitemap就可以檢視sitemap了

sitemap.xml檔案顯示大致是這樣的:sitemap

將網站新增到百度搜尋引擎

  • 登陸網站站長之家https://ziyuan.baidu.com/

  • 首先我們需要在我們的html主頁面中新增meta程式碼<meta name="baidu-site-verification" content="PVrsG5G9a2" />

用來認證我們的網站

之後

  • 我們可以在提交連結中提交單個頁面,或者講js程式碼:

<script>

(function(){

    var bp = document.createElement('script');

    var curProtocol = window.location.protocol.split(':')[0];

    if (curProtocol === 'https') {

        bp.src = 'https://zz.bdstatic.com/linksubmit/push.js';

    }

    else {

        bp.src = 'http://push.zhanzhang.baidu.com/push.js';

    }

    var s = document.getElementsByTagName("script")[0];

    s.parentNode.insertBefore(bp, s);

})();

</script>

這串程式碼會講訪問的url直接提交到站長之家中國。還是挺方便的吧。

  • 當讓我們可以用django_sitemap生成的網站地圖來提交到sitemap.xml介面,直接貼上url就可以。

django部落格提交到伺服器後,sitemap.xml域名顯示的localhost或者127.0.0.1怎麼辦?

在本地使用sitemap的時候我們在/admin中新增的站點資訊是127.0.0.1:0000之後如果把資料庫傳到伺服器的話這項資料是沒有改的。

  • 可以在管理介面修改站點資訊為自己的域名,比如我就把127.0.0.1改成了boywithacoin.cn

  • 修改伺服器django_site的表修改裡面的資訊為自己的域名就可以了

END 其他搜尋引擎的地址也大致相同,各個搜尋引擎提交連結的地址彙總新增的時候有遇到問題的歡迎留言哦

本作品採用《CC 協議》,轉載必須註明作者和本文連結
文章!!首發於我的部落格Stray_Camel(^U^)ノ~YO

相關文章