---
title: "Ramverket för webbplatskartor"
version: 5.2
locale: sv
source: https://docs.djangoproject.com/sv/5.2/ref/contrib/sitemaps/
canonical: https://djangodocs.dev/sv/5.2/ref/contrib/sitemaps/
---
# Ramverket för webbplatskartor

Django levereras med ett ramverk för generering av sitemap på hög nivå för att skapa [sitemap](https://www.sitemaps.org/) XML-filer.

## Översikt

En webbplatskarta är en XML-fil på din webbplats som berättar för sökmotorindexerare hur ofta dina sidor ändras och hur ”viktiga” vissa sidor är i förhållande till andra sidor på din webbplats. Den här informationen hjälper sökmotorer att indexera din webbplats.

Djangos ramverk för webbplatskartor automatiserar skapandet av denna XML-fil genom att låta dig uttrycka denna information i Python-kod.

Det fungerar ungefär som Djangos [syndication-ramverk](/sv/5.2/ref/contrib/syndication/). För att skapa en webbplatskarta, skriv en [`Sitemap`](#django.contrib.sitemaps.Sitemap)-klass och peka på den i din [URLconf](/sv/5.2/topics/http/urls/).

## Installation

Följ dessa steg för att installera appen för webbplatskartor:

1. Lägg till `'django.contrib.sitemaps'` i inställningen [`INSTALLED_APPS`](/sv/5.2/ref/settings/#std-setting-INSTALLED_APPS).
2. Se till att din [`TEMPLATES`](/sv/5.2/ref/settings/#std-setting-TEMPLATES)-inställning innehåller en `DjangoTemplates`-backend vars `APP_DIRS`-alternativ är inställt på `True`. Det finns där som standard, så du behöver bara ändra detta om du har ändrat den inställningen.
3. Se till att du har installerat [`sites-ramverket`](/sv/5.2/ref/contrib/sites/#module-django.contrib.sites).

(Obs: Applikationen för webbplatskartan installerar inga databastabeller. Den enda anledningen till att den behöver läggas in i [`INSTALLED_APPS`](/sv/5.2/ref/settings/#std-setting-INSTALLED_APPS) är så att [`Loader()`](/sv/5.2/ref/templates/api/#django.template.loaders.app_directories.Loader) mallladdaren kan hitta standardmallarna)

## Initialisering

#### `views.sitemap(request, sitemaps, section=None, template_name='sitemap.xml', content_type='application/xml')`

För att aktivera generering av webbplatskartor på din Django-webbplats, lägg till den här raden i din [URLconf](/sv/5.2/topics/http/urls/):

```
from django.contrib.sitemaps.views import sitemap

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

Detta säger till Django att bygga en webbplatskarta när en klient öppnar `/sitemap.xml`.

Namnet på sitemap-filen är inte viktigt, men platsen är det. Sökmotorer indexerar bara länkar i din sitemap för den aktuella URL-nivån och lägre. Om till exempel `sitemap.xml` finns i din rotkatalog kan den referera till vilken URL som helst på din webbplats. Men om din webbplatskarta finns i `/content/sitemap.xml` kan den bara referera till webbadresser som börjar med `/content/`.

Sitemap-vyn tar ett extra, obligatoriskt argument: `{'sitemaps': sitemaps}`. `sitemaps` bör vara en ordbok som mappar en kort sektionsetikett (t.ex. `blogg` eller `nyheter`) till dess [`Sitemap`](#django.contrib.sitemaps.Sitemap)-klass (t.ex. `BlogSitemap` eller `NewsSitemap`). Den kan också mappa till en *instans* av en [`Sitemap`](#django.contrib.sitemaps.Sitemap)-klass (t.ex. `BlogSitemap(some_var)`).

## klasserna `Sitemap`

En [`Sitemap`](#django.contrib.sitemaps.Sitemap)-klass är en Python-klass som representerar ett ”avsnitt” av poster i din webbplatskarta. Till exempel: kan en `sitemap`-klass representera alla poster i din blogg, medan en annan kan representera alla händelser i din evenemangskalender.

I det enklaste fallet klumpas alla dessa avsnitt ihop i en `sitemap.xml`, men det är också möjligt att använda ramverket för att generera ett sitemap-index som refererar till enskilda sitemap-filer, en per avsnitt. (Se ”Skapa ett sitemap-index” nedan.)

[`Sitemap`](#django.contrib.sitemaps.Sitemap)-klasser måste vara underklasser till `django.contrib.sitemaps.Sitemap`. De kan finnas var som helst i din kodbas.

## Ett exempel

Låt oss anta att du har ett bloggsystem, med en `Entry`-modell, och du vill att din sitemap ska innehålla alla länkar till dina enskilda blogginlägg. Så här kan din sitemap-klass se ut:

```
from django.contrib.sitemaps import Sitemap
from blog.models import Entry

class BlogSitemap(Sitemap):
    changefreq = "never"
    priority = 0.5

    def items(self):
        return Entry.objects.filter(is_draft=False)

    def lastmod(self, obj):
        return obj.pub_date
```

Anteckning:

- [`changefreq`](#django.contrib.sitemaps.Sitemap.changefreq) och [`priority`](#django.contrib.sitemaps.Sitemap.priority) är klassattribut som motsvarar elementen `<changefreq>` respektive `<priority>`. De kan göras anropbara som funktioner, som [`lastmod`](#django.contrib.sitemaps.Sitemap.lastmod) var i exemplet.
- [`items()`](#django.contrib.sitemaps.Sitemap.items) är en metod som returnerar en sekvens eller `QuerySet` av objekt. De returnerade objekten kommer att skickas till alla anropsbara metoder som motsvarar en sitemap-egenskap ([`location`](#django.contrib.sitemaps.Sitemap.location), [`lastmod`](#django.contrib.sitemaps.Sitemap.lastmod), [`changefreq`](#django.contrib.sitemaps.Sitemap.changefreq), och [`priority`](#django.contrib.sitemaps.Sitemap.priority)).
- [`lastmod`](#django.contrib.sitemaps.Sitemap.lastmod) bör returnera en [`datetime`](https://docs.python.org/3/library/datetime.html#datetime.datetime).
- Det finns ingen metod [`location`](#django.contrib.sitemaps.Sitemap.location) i det här exemplet, men du kan ange den för att ange URL:en för ditt objekt. Som standard anropar [`location()`](#django.contrib.sitemaps.Sitemap.location) `get_absolute_url()` på varje objekt och returnerar resultatet.

## klassreferens för `Sitemap`

#### `class Sitemap`

En `Sitemap`-klass kan definiera följande metoder/attribut:

#### `items`

**Krävs.** En metod som returnerar en sekvens eller `QuerySet` av objekt. Ramverket bryr sig inte om vilken *typ* av objekt de är; allt som betyder något är att dessa objekt skickas till metoderna [`location()`](#django.contrib.sitemaps.Sitemap.location), [`lastmod()`](#django.contrib.sitemaps.Sitemap.lastmod), [`changefreq()`](#django.contrib.sitemaps.Sitemap.changefreq) och [`priority()`](#django.contrib.sitemaps.Sitemap.priority).

#### `location`

**Optionell.** Antingen en metod eller ett attribut.

Om det är en metod ska den returnera den absoluta sökvägen för ett givet objekt som returneras av [`items()`](#django.contrib.sitemaps.Sitemap.items).

Om det är ett attribut ska dess värde vara en sträng som representerar en absolut sökväg som ska användas för *alla* objekt som returneras av [`items()`](#django.contrib.sitemaps.Sitemap.items).

I båda fallen betyder ”absolut sökväg” en URL som inte innehåller protokollet eller domänen. Exempel på detta:

- Bra: `'/foo/bar/'`
- Dålig: `'example.com/foo/bar/'`
- Dålig: `'https://example.com/foo/bar/'`

Om [`location`](#django.contrib.sitemaps.Sitemap.location) inte anges kommer ramverket att anropa metoden `get_absolute_url()` på varje objekt som returneras av [`items()`](#django.contrib.sitemaps.Sitemap.items).

För att ange ett annat protokoll än `'http'`, använd [`protocol`](#django.contrib.sitemaps.Sitemap.protocol).

#### `lastmod`

**Optionell.** Antingen en metod eller ett attribut.

Om det är en metod ska den ta ett argument - ett objekt som returneras av [`items()`](#django.contrib.sitemaps.Sitemap.items) \- och returnera objektets senast ändrade datum/tid som en [`datetime`](https://docs.python.org/3/library/datetime.html#datetime.datetime).

Om det är ett attribut ska dess värde vara en [`datetime`](https://docs.python.org/3/library/datetime.html#datetime.datetime) som representerar det senast ändrade datumet/tiden för *alla* objekt som returneras av [`items()`](#django.contrib.sitemaps.Sitemap.items).

Om alla objekt i en sitemap har en [`lastmod`](#django.contrib.sitemaps.Sitemap.lastmod), kommer sitemap som genereras av [`views.sitemap()`](#django.contrib.sitemaps.views.sitemap) att ha en `Last-Modified` header som är lika med den senaste `lastmod`. Du kan aktivera [`ConditionalGetMiddleware`](/sv/5.2/ref/middleware/#django.middleware.http.ConditionalGetMiddleware) för att få Django att svara på lämpligt sätt på förfrågningar med en `If-Modified-Since` header som förhindrar att webbplatskartan skickas om den inte har ändrats.

#### `paginator`

Tillval

Denna egenskap returnerar en [`Paginator`](/sv/5.2/ref/paginator/#django.core.paginator.Paginator) för [`items()`](#django.contrib.sitemaps.Sitemap.items). Om du genererar sitemaps i en batch kanske du vill åsidosätta detta som en cachad egenskap för att undvika flera `items()`-anrop.

#### `changefreq`

**Optionell.** Antingen en metod eller ett attribut.

Om det är en metod ska den ta ett argument - ett objekt som returneras av [`items()`](#django.contrib.sitemaps.Sitemap.items) \- och returnera objektets ändringsfrekvens som en sträng.

Om det är ett attribut ska dess värde vara en sträng som representerar ändringsfrekvensen för *alla* objekt som returneras av [`items()`](#django.contrib.sitemaps.Sitemap.items).

Möjliga värden för [`changefreq`](#django.contrib.sitemaps.Sitemap.changefreq), oavsett om du använder en metod eller ett attribut, är:

- `'always'`
- `'hourly'`
- `'daily'`
- `'weekly'`
- `'monthly'`
- `'yearly'`
- ”aldrig

#### `priority`

**Optionell.** Antingen en metod eller ett attribut.

Om det är en metod ska den ta ett argument - ett objekt som returneras av [`items()`](#django.contrib.sitemaps.Sitemap.items) \- och returnera objektets prioritet som antingen en sträng eller en float.

Om det är ett attribut ska dess värde vara antingen en sträng eller en float som representerar prioriteten för *alla* objekt som returneras av [`items()`](#django.contrib.sitemaps.Sitemap.items).

Exempel på värden för [`priority`](#django.contrib.sitemaps.Sitemap.priority): `0.4`, `1.0`. Standardprioriteten för en sida är `0.5`. Se [sitemaps.org documentation](https://www.sitemaps.org/protocol.html#prioritydef) för mer information.

#### `protocol`

Tillval

Detta attribut definierar protokollet (`'http'` eller `'https'`) för webbadresserna i webbplatskartan. Om det inte anges används det protokoll som webbplatskartan begärdes med. Om webbplatskartan skapas utanför ramen för en begäran är standardvärdet ’https’’.

#### `limit`

Tillval

Detta attribut definierar det maximala antalet webbadresser som ingår på varje sida i webbplatskartan. Dess värde bör inte överstiga standardvärdet `50000`, vilket är den övre gräns som tillåts i [Sitemaps-protokollet](https://www.sitemaps.org/protocol.html#index).

#### `i18n`

Tillval

Ett booleskt attribut som anger om webbadresserna i den här webbplatskartan ska genereras med alla dina [`LANGUAGES`](/sv/5.2/ref/settings/#std-setting-LANGUAGES). Standardvärdet är `False`.

#### `languages`

Tillval

En sekvens av [språkkoder](/sv/5.2/topics/i18n/#term-language-code) som ska användas för att generera alternativa länkar när [`i18n`](#django.contrib.sitemaps.Sitemap.i18n) är aktiverad. Standard är [`LANGUAGES`](/sv/5.2/ref/settings/#std-setting-LANGUAGES).

#### `alternates`

Tillval

Ett boolean-attribut. När det används tillsammans med [`i18n`](#django.contrib.sitemaps.Sitemap.i18n) kommer genererade URL:er att ha en lista med alternativa länkar som pekar på andra språkversioner med hjälp av [hreflang-attributet](https://developers.google.com/search/docs/advanced/crawling/localized-versions). Standardvärdet är `False`.

#### `x_default`

Tillval

Ett booleanskt attribut. När det är `True` kommer de alternativa länkar som genereras av `` alternates` `` att innehålla en `hreflang="x-default"` fallback-post med ett värde av [`LANGUAGE_CODE`](/sv/5.2/ref/settings/#std-setting-LANGUAGE_CODE). Standardvärdet är `False`.

#### `get_latest_lastmod()`

En metod som returnerar det senaste värdet som returneras av [`lastmod`](#django.contrib.sitemaps.Sitemap.lastmod). Denna funktion används för att lägga till attributet `lastmod` till [Sitemap index context variables](#sitemap-index-context-variables).

Som standard returnerar [`get_latest_lastmod()`](#django.contrib.sitemaps.Sitemap.get_latest_lastmod):

- Om [`lastmod`](#django.contrib.sitemaps.Sitemap.lastmod) är ett attribut: [`lastmod`](#django.contrib.sitemaps.Sitemap.lastmod).
- Om [`lastmod`](#django.contrib.sitemaps.Sitemap.lastmod) är en metod: Den senaste `lastmod` som returneras genom att anropa metoden med alla objekt som returneras av [`Sitemap.items()`](#django.contrib.sitemaps.Sitemap.items).

#### `get_languages_for_item(item)`

En metod som returnerar den sekvens av språkkoder som objektet visas för. Som standard returnerar [`get_languages_for_item()`](#django.contrib.sitemaps.Sitemap.get_languages_for_item) [`languages`](#django.contrib.sitemaps.Sitemap.languages).

## Genvägar

Ramverket för webbplatskartor tillhandahåller en bekvämlighetsklass för ett vanligt fall:

#### `class GenericSitemap(info_dict, priority=None, changefreq=None, protocol=None)`

Klassen [`django.contrib.sitemaps.GenericSitemap`](#django.contrib.sitemaps.GenericSitemap) låter dig skapa en webbplatskarta genom att skicka en ordbok till den, som måste innehålla minst en post med namnet `queryset`. Denna queryset kommer att användas för att generera objekten i webbplatskartan. Den kan också ha en `date_field`-post som anger ett datumfält för objekt som hämtas från `queryset`. Detta kommer att användas för attributet [`lastmod`](#django.contrib.sitemaps.Sitemap.lastmod) och metoderna [`get_latest_lastmod()`](#django.contrib.sitemaps.Sitemap.get_latest_lastmod) i den genererade webbplatskartan.

Nyckelordsargumenten [`priority`](#django.contrib.sitemaps.Sitemap.priority), [`changefreq`](#django.contrib.sitemaps.Sitemap.changefreq) och [`protocol`](#django.contrib.sitemaps.Sitemap.protocol) gör det möjligt att ange dessa attribut för alla URL:er.

### Exempel

Här är ett exempel på en [URLconf](/sv/5.2/topics/http/urls/) som använder [`GenericSitemap`](#django.contrib.sitemaps.GenericSitemap):

```
from django.contrib.sitemaps import GenericSitemap
from django.contrib.sitemaps.views import sitemap
from django.urls import path
from blog.models import Entry

info_dict = {
    "queryset": Entry.objects.all(),
    "date_field": "pub_date",
}

urlpatterns = [
    # some generic view using info_dict
    # ...
    # the sitemap
    path(
        "sitemap.xml",
        sitemap,
        {"sitemaps": {"blog": GenericSitemap(info_dict, priority=0.6)}},
        name="django.contrib.sitemaps.views.sitemap",
    ),
]
```

## Sitemap för statiska vyer

Ofta vill du att sökmotorns sökrobotar ska indexera vyer som varken är objektdetaljsidor eller flatpages. Lösningen är att uttryckligen lista URL-namn för dessa vyer i `items` och anropa ``reverse`()`` i `location`-metoden i sitemap. Till exempel:

```
# sitemaps.py
from django.contrib import sitemaps
from django.urls import reverse

class StaticViewSitemap(sitemaps.Sitemap):
    priority = 0.5
    changefreq = "daily"

    def items(self):
        return ["main", "about", "license"]

    def location(self, item):
        return reverse(item)

# urls.py
from django.contrib.sitemaps.views import sitemap
from django.urls import path

from .sitemaps import StaticViewSitemap
from . import views

sitemaps = {
    "static": StaticViewSitemap,
}

urlpatterns = [
    path("", views.main, name="main"),
    path("about/", views.about, name="about"),
    path("license/", views.license, name="license"),
    # ...
    path(
        "sitemap.xml",
        sitemap,
        {"sitemaps": sitemaps},
        name="django.contrib.sitemaps.views.sitemap",
    ),
]
```

## Skapa ett index över webbplatskartor

#### `views.index(request, sitemaps, template_name='sitemap_index.xml', content_type='application/xml', sitemap_url_name='django.contrib.sitemaps.views.sitemap')`

Sitemap-ramverket har också möjlighet att skapa ett sitemap-index som refererar till enskilda sitemap-filer, en för varje avsnitt som definieras i din `sitemaps`-dictionary. De enda skillnaderna i användning är:

- Du använder två vyer i din URLconf: [`django.contrib.sitemaps.views.index()`](#django.contrib.sitemaps.views.index) och [`django.contrib.sitemaps.views.sitemap()`](#django.contrib.sitemaps.views.sitemap).
- Vyn [`django.contrib.sitemaps.views.sitemap()`](#django.contrib.sitemaps.views.sitemap) bör ta ett argument med nyckelordet `section`.

Så här skulle de relevanta URLconf-raderna se ut för exemplet ovan:

```
from django.contrib.sitemaps import views

urlpatterns = [
    path(
        "sitemap.xml",
        views.index,
        {"sitemaps": sitemaps},
        name="django.contrib.sitemaps.views.index",
    ),
    path(
        "sitemap-<section>.xml",
        views.sitemap,
        {"sitemaps": sitemaps},
        name="django.contrib.sitemaps.views.sitemap",
    ),
]
```

Detta kommer automatiskt att generera en `sitemap.xml`-fil som refererar till både `sitemap-flatpages.xml` och `sitemap-blog.xml`. Klasserna [`Sitemap`](#django.contrib.sitemaps.Sitemap) och dict `sitemaps` ändras inte alls.

Om alla webbplatskartor har en `lastmod` som returneras av ``Sitemap.get_latest_lastmod`()`` kommer webbplatskartans index att ha en `Last-Modified` header som är lika med den senaste `lastmod`.

Du bör skapa en indexfil om en av dina sitemaps har mer än 50 000 webbadresser. I det här fallet kommer Django automatiskt att paginera webbplatskartan och indexet kommer att återspegla det.

Om du inte använder vaniljvyn för webbplatskartan - till exempel om den är förpackad med en cachningsdekorator - måste du namnge din webbplatskartvy och skicka `sitemap_url_name` till indexvyn:

```
from django.contrib.sitemaps import views as sitemaps_views
from django.views.decorators.cache import cache_page

urlpatterns = [
    path(
        "sitemap.xml",
        cache_page(86400)(sitemaps_views.index),
        {"sitemaps": sitemaps, "sitemap_url_name": "sitemaps"},
    ),
    path(
        "sitemap-<section>.xml",
        cache_page(86400)(sitemaps_views.sitemap),
        {"sitemaps": sitemaps},
        name="sitemaps",
    ),
]
```

## Anpassning av mallar

Om du vill använda en annan mall för varje webbplatskarta eller index för webbplatskartor som finns på din webbplats kan du ange det genom att skicka en parameter ”template\_name” till vyerna ”sitemap” och ”index” via URLconf:

```
from django.contrib.sitemaps import views

urlpatterns = [
    path(
        "custom-sitemap.xml",
        views.index,
        {"sitemaps": sitemaps, "template_name": "custom_sitemap.html"},
        name="django.contrib.sitemaps.views.index",
    ),
    path(
        "custom-sitemap-<section>.xml",
        views.sitemap,
        {"sitemaps": sitemaps, "template_name": "custom_sitemap.html"},
        name="django.contrib.sitemaps.views.sitemap",
    ),
]
```

Dessa vyer returnerar [`TemplateResponse`](/sv/5.2/ref/template-response/#django.template.response.TemplateResponse)-instanser som gör att du enkelt kan anpassa svarsdata före rendering. För mer information, se [TemplateResponse-dokumentation](/sv/5.2/ref/template-response/).

### Variabler i sammanhanget

När du anpassar mallarna för vyerna [`index()`](#django.contrib.sitemaps.views.index) och [`sitemap()`](#django.contrib.sitemaps.views.sitemap) kan du förlita dig på följande kontextvariabler.

### Index

Variabeln `sitemaps` är en lista med objekt som innehåller attributen `location` och `lastmod` för var och en av sitemaps. Varje URL innehåller följande attribut:

- `plats`: Platsen (webbadress och sida) för webbplatskartan.
- `lastmod`: Fylls på av metoden [`get_latest_lastmod()`](#django.contrib.sitemaps.Sitemap.get_latest_lastmod) för varje webbplatskarta.

### Webbplatskarta

Variabeln `urlset` är en lista över webbadresser som ska visas i webbplatskartan. Varje URL har attribut som definieras i klassen [`Sitemap`](#django.contrib.sitemaps.Sitemap):

- `alternativ`
- `ändringsfrekvens`
- `objekt`
- `lastmod`
- `plats`
- `prioritet`

Attributet `alternates` är tillgängligt när [`i18n`](#django.contrib.sitemaps.Sitemap.i18n) och [`alternates`](#django.contrib.sitemaps.Sitemap.alternates) är aktiverade. Det är en lista över andra språkversioner, inklusive den valfria [`x_default`](#django.contrib.sitemaps.Sitemap.x_default) fallbacken, för varje URL. Varje alternativ är en ordbok med nycklarna `location` och `lang_code`.

Attributet `item` har lagts till för varje URL för att möjliggöra mer flexibel anpassning av mallarna, t.ex. [Google news sitemaps](https://support.google.com/news/publisher-center/answer/9606710). Om man antar att Sitemap [`items()`](#django.contrib.sitemaps.Sitemap.items) skulle returnera en lista över objekt med `publication_data` och ett `tags`-fält skulle något liknande detta generera en Google News-kompatibel webbplatskarta:

```xml+django
<?xml version="1.0" encoding="UTF-8"?>
<urlset
  xmlns="https://www.sitemaps.org/schemas/sitemap/0.9"
  xmlns:news="https://www.google.com/schemas/sitemap-news/0.9">
{% spaceless %}
{% for url in urlset %}
  <url>
    <loc>{{ url.location }}</loc>
    {% if url.lastmod %}<lastmod>{{ url.lastmod|date:"Y-m-d" }}</lastmod>{% endif %}
    {% if url.changefreq %}<changefreq>{{ url.changefreq }}</changefreq>{% endif %}
    {% if url.priority %}<priority>{{ url.priority }}</priority>{% endif %}
    <news:news>
      {% if url.item.publication_date %}<news:publication_date>{{ url.item.publication_date|date:"Y-m-d" }}</news:publication_date>{% endif %}
      {% if url.item.tags %}<news:keywords>{{ url.item.tags }}</news:keywords>{% endif %}
    </news:news>
   </url>
{% endfor %}
{% endspaceless %}
</urlset>
```
