这个问题与我刚刚问的问题非常相似:我可以让谷歌搜索结果使用/显示最终的重定向网址吗?但现在这个问题是特定于Django的。
"我的网站"具有使用以下格式的网页 URL:
www.mysite.com/id/pretty_title
首页链接到这些页面,但 href 实际上包含一些参数:
www.mysite.com/id/?some_ugly_parameters_to_let_me_know_what_search_it_is_from
然后重定向到
www.mysite.com/id/pretty_title
显示页面。
我的问题是谷歌的搜索结果将指向该页面的链接显示为丑陋的网址,而不是漂亮的重定向网址。
我学到的是,我需要提供一个规范的链接。但是,当丑陋的 url 页面从未真正存在时,我该怎么做,至少不是我写的页面?
服务器端发生的事情是丑陋 url 的视图执行重定向:
return HttpResponseRedirect(pretty_url)
我认为这是您正在寻找的正确构建模板标签。 {{ request.build_absolute_uri }}
把它作为从 Django 模板返回的 HTML 的一部分,放在<head>
部分。你的 Django 中有base.html
吗?您可以将{% block %}
设置为规范网址的占位符,然后在{% extends base.html %}
的每个单独网页中设置该值
基地.html
<html>
<head>
<link rel="canonical" href="{% block canonical_url %}{% endblock %}">
</head>
...
(1) 您希望您的www
子域成为规范域名,并且 (2) 请求路径中有 URL 参数,则许多这些建议的解决方案都存在问题。
我实际上建议在基本模板中对其进行硬编码并附加request.path
.
<link rel="canonical" href="https://www.example.com{{ request.path }}">
如果您最终想要使用 build_absolute_uri
,我会在您的视图中执行以下操作(或者您可以创建一个模板函数):
canonical_url = request.build_absolute_uri(request.path)
调用不带参数的build_absolute_uri()
将调用request.get_full_path()
并将其附加到您的域中。 如果用户通过 https://www.example.com/?param=123
找到您的网站,您的规范网址将包含该参数。