2014-03-29 15 views
6

Diese Frage ist sehr ähnlich zu einer, die ich gerade href: Can I get Google search results to use/display the final redirect url? fragte, aber jetzt ist die Frage spezifisch für Django.Wie kanonische URL mit Django HttpResponseRedirect bereitgestellt werden?

Meine Website hat die Homepage URLs, die das folgende Format verwenden:

www.mysite.com/id/pretty_title 

der Startseite Links zu diesen Seiten, aber die href enthält tatsächlich einige Parameter:

www.mysite.com/id/?some_ugly_parameters_to_let_me_know_what_search_it_is_from 

Diese dann zu

umleitet
www.mysite.com/id/pretty_title 

, die die Seite zeigt.

Mein Problem ist, dass Googles Suchergebnisse zeigen den Link zu der Seite als die hässliche URL anstelle der hübsch umgeleitet ein.

Was ich gelernt habe, ist, dass ich eine kanonische Verbindung bereitstellen muss. Aber wie kann ich das tun, wenn die hässliche URL-Seite nie wirklich existiert, zumindest nicht als eine, die ich geschrieben habe?

Was Serverseite passiert ist, dass der Blick auf die hässliche URL hat eine Umleitung:

return HttpResponseRedirect(pretty_url) 

Antwort

5

Sie können es nur als Teil des HTML setzen aus der Django-Vorlage zurück, in dem <head> Abschnitt. Haben Sie eine base.html in Ihrem Django? Sie können für die kanonische URL als Platzhalter ein {% block %} Setup und dann in jeder einzelnen Seite diesen Wert festgelegt, dass {% extends base.html %}

base.html

<html> 
<head> 
    <link rel="canonical" href="{% block canonical_url %}{% endblock %}"> 
</head> 
... 
+0

Diese HTML-Seite wird von pretty_url angezeigt. Oder "zählt" es auch, dass es von der hässlichen_url angezeigt wird, da es dorthin umleitet? – user984003

+1

In Ihrem Django sollte es nur eine Ansicht geben, die diesen eindeutigen Inhalt zurückgibt. Sie müssen nur das kanonische Tag in das HTML dieser einen Ansicht bringen. Ob der Inhalt dieser Ansicht über die eine oder andere URL zugänglich ist, ist nicht wichtig. – bakkal

+0

Großartig, danke! Ich werde das machen. – user984003

10

Ich denke, das das Tag richtig gebaut Vorlage ist, dass Sie Auf der Suche nach. {{request.build_absolute_uri}}

+0

Aus irgendeinem Grund gibt 'build_absolute_uri' mir das HTTP-Schema, auch wenn die gesamte Website auf https ist. Ich bin auf Django 1.6 (ziemlich alt, aber es ist, was wir im Moment haben). – PritishC

Verwandte Themen