生成站点地图:手动更新Page的lastmod / last_published_at

时间:2019-02-11 07:55:33

标签: python django sitemap wagtail

我有一个PublicationsPage和一个PublicationPage班。 PublicationsPage显示其直接子级的列表,并在http://mysite/publications的简短预览列表中呈现它们。

class PublicationsPage(Page):
    # ...
    def get_context(self, request):
        context = super().get_context(request)
        publications = PublicationPage.objects.child_of(self).live()
        context['publications'] = publications
        return context

这意味着每当添加/删除/修改新的PublicationPage时,列表就会相应更新。但是由于我没有更新PublicationsPage位置的lastmod / last_published_at属性,所以永远不会改变。这对搜索引擎会不会引起误导?


真正的骇人听闻的尝试可能是每次我触摸子项时都更新父页面的/publications日期。

last_published_at

还有其他建议吗?

2 个答案:

答案 0 :(得分:1)

生成sitemap时,您可以设置属性lastmod,该属性接受一种针对站点地图中每个项目调用的方法。

因此,在生成PublicationsPage站点地图时,请将该属性设置为一种查询每个PublicationsPage项目的所有子项并返回最新日期的方法。

答案 1 :(得分:1)

您可以在Page模型上定义get_sitemap_urls,如下所示:

class PublicationsPage(Page):
    def get_sitemap_urls(self, request=None):
        # Get the defaults sitemap URLS.
        urls = super().get_sitemap_urls(request=request)

        # Get the last modifications time of your publications.
        publications = PublicationPage.objects.child_of(self).live()
        last_publication = publications.order_by('-last_published_at').first()

        # Update the default entry.
        if last_publication:
            urls[0]['lastmod'] = last_publication.last_published_at

        # Return the urls.
        return urls