---
title: "Ramverket för webbplatskartor"
version: 6.1
locale: sv
source: https://docs.djangoproject.com/sv/6.1/ref/contrib/sitemaps/
canonical: https://djangodocs.dev/sv/6.1/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/6.1/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/6.1/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/6.1/ref/settings/#std-setting-INSTALLED_APPS).
2. Se till att din [`TEMPLATES`](/sv/6.1/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/6.1/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/6.1/ref/settings/#std-setting-INSTALLED_APPS) är så att [`Loader()`](/sv/6.1/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/6.1/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) is a method that returns a [sequence](https://docs.python.org/3/glossary.html#term-sequence) or
  `QuerySet` of objects. The objects returned will get passed to any callable
  methods corresponding to a sitemap property ([`location`](#django.contrib.sitemaps.Sitemap.location),
  [`lastmod`](#django.contrib.sitemaps.Sitemap.lastmod), [`changefreq`](#django.contrib.sitemaps.Sitemap.changefreq), and
  [`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).
- There is no [`location`](#django.contrib.sitemaps.Sitemap.location) method in this example, but you
  can provide it in order to specify the URL for your object. By default,
  [`location`](#django.contrib.sitemaps.Sitemap.location) calls `get_absolute_url()` on each object
  and returns the result.

## klassreferens för `Sitemap`

#### `class Sitemap`

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

#### `items()`

**Required.** A method that returns a [sequence](https://docs.python.org/3/glossary.html#term-sequence) or `QuerySet`
of objects. The framework doesn’t care what *type* of objects they are;
all that matters is that these objects get passed to the
[`location`](#django.contrib.sitemaps.Sitemap.location), [`lastmod`](#django.contrib.sitemaps.Sitemap.lastmod),
[`changefreq`](#django.contrib.sitemaps.Sitemap.changefreq) and [`priority`](#django.contrib.sitemaps.Sitemap.priority) methods.

#### `location`

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

If it’s a method, it should return the absolute path for a given object
as returned by [`items()`](#django.contrib.sitemaps.Sitemap.items).

If it’s an attribute, its value should be a string representing an
absolute path to use for *every* object returned by
[`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/'`

If [`location`](#django.contrib.sitemaps.Sitemap.location) isn’t provided, the framework will call
the `get_absolute_url()` method on each object as returned by
[`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.

If it’s a method, it should take one argument – an object as returned
by [`items()`](#django.contrib.sitemaps.Sitemap.items) – and return that object’s last-modified
date/time as a [`datetime`](https://docs.python.org/3/library/datetime.html#datetime.datetime).

If it’s an attribute, its value should be a [`datetime`](https://docs.python.org/3/library/datetime.html#datetime.datetime)
representing the last-modified date/time for *every* object returned by
[`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/6.1/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

This property returns a [`Paginator`](/sv/6.1/ref/paginator/#django.core.paginator.Paginator) for
[`items()`](#django.contrib.sitemaps.Sitemap.items). If you generate sitemaps in a batch you may
want to override this as a cached property in order to avoid multiple
`items()` calls.

#### `changefreq`

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

If it’s a method, it should take one argument – an object as returned
by [`items()`](#django.contrib.sitemaps.Sitemap.items) – and return that object’s change
frequency as a string.

If it’s an attribute, its value should be a string representing the
change frequency of *every* object returned by [`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.

If it’s a method, it should take one argument – an object as returned
by [`items()`](#django.contrib.sitemaps.Sitemap.items) – and return that object’s priority as
either a string or float.

If it’s an attribute, its value should be either a string or float
representing the priority of *every* object returned by
[`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/6.1/ref/settings/#std-setting-LANGUAGES). Standardvärdet är `False`.

#### `languages`

Tillval

En sekvens av [språkkoder](/sv/6.1/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/6.1/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/6.1/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).
- If [`lastmod`](#django.contrib.sitemaps.Sitemap.lastmod) is a method:
  The latest `lastmod` returned by calling the method with all
  items returned by [`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)`

The [`django.contrib.sitemaps.GenericSitemap`](#django.contrib.sitemaps.GenericSitemap) class allows you to
create a sitemap by passing it a dictionary which has to contain at least
a `queryset` entry. This queryset will be used to generate the items
of the sitemap. It may also have a `date_field` entry that
specifies a date field for objects retrieved from the `queryset`.
This will be used for the [`lastmod`](#django.contrib.sitemaps.Sitemap.lastmod) attribute and
[`get_latest_lastmod()`](#django.contrib.sitemaps.Sitemap.get_latest_lastmod) methods in the generated sitemap.

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/6.1/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.

If all sitemaps have a `lastmod` returned by
[`get_latest_lastmod()`](#django.contrib.sitemaps.Sitemap.get_latest_lastmod) the sitemap index will have a
`Last-Modified` header equal to the latest `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/6.1/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/6.1/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`.

The `item` attribute has been added for each URL to allow more flexible
customization of the templates, such as [Google news sitemaps](https://support.google.com/news/publisher-center/answer/9606710). Assuming
Sitemap’s [`items()`](#django.contrib.sitemaps.Sitemap.items) would return a list of items with
`publication_data` and a `tags` field something like this would
generate a Google News compatible sitemap:

```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>
```
