#django #url #seo #django-views
#django #url #seo #django-просмотры
Вопрос:
models.py
class People(models.Model):
name = models.CharField(max_length=16)
meters_away = models.IntegerField()
Давайте заполним базу данных:
>>> from people.models import People
>>> a = People()
>>> a.name = 'George'
>>> a.meters_away = 15
>>> a.save()
>>> b = People()
>>> b.name = 'Jim'
>>> b.meters_away = 10
>>> b.save()
Предположим, что у нас есть URL, который возвращает всех пользователей в диапазоне x метров:
http://example.com/range/<meters>
Эта схема URL-адресов принимает 3 обращения следующим образом:
http://example.com/range/20
http://example.com/range/30
http://example.com/range/40
Эти обращения создадут следующие запросы:
>>> hit1 = People.objects.filter(meters_away__lt=20)
>>> hit2 = People.objects.filter(meters_away__lt=30)
>>> hit3 = People.objects.filter(meters_away__lt=40)
Где:
>>> list(hit1) == list(hit2) == list(hit3)
>>> True
Это означает, что example.com
, будет обслуживать 3 разных URL-адреса с одинаковым контентом.
С точки зрения SEO, как все возможные URL-адреса (метры: 21, 22, 23, 24, 30, 40 и т.д.) фильтруются таким образом, чтобы к ним добавлялся канонический URL?
Ответ №1:
Насколько я понял ваш вопрос, вы можете захотеть получить максимальное расстояние в метрах, которое дает тот же результат, что и текущее расстояние (скажем, m
метров):
next_number = People.objects.filter(meters_away__gte=m).order_by('meters_away')[:1]
next_number = next_number[0] if next_number else m
и канонический URL-адрес будет:
http://example.com/range/<next_number>
Комментарии:
1. Мой пример тривиален и в нем отсутствуют важные факторы, которые могли бы сделать его более надежным. Тем не менее, ваш ответ раскрывает идею, которая заставит его работать. Спасибо!