From 3079105705d76ff0fbfcc755825aa75b0b6ef01a Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Fri, 25 Oct 2013 12:18:23 -0400
Subject: [PATCH] Set Link: <url>; rel="canonical" http header for SEO (issue-304)

---
 src/main/java/com/gitblit/wicket/pages/BasePage.java |   13 +++++++++++++
 1 files changed, 13 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/gitblit/wicket/pages/BasePage.java b/src/main/java/com/gitblit/wicket/pages/BasePage.java
index cb9de9f..f881683 100644
--- a/src/main/java/com/gitblit/wicket/pages/BasePage.java
+++ b/src/main/java/com/gitblit/wicket/pages/BasePage.java
@@ -88,6 +88,16 @@
 		}
 	}
 
+	protected String getCanonicalUrl() {
+		return getCanonicalUrl(getClass(), getPageParameters());
+	}
+
+	protected String getCanonicalUrl(Class<? extends BasePage> clazz, PageParameters params) {
+		String relativeUrl = urlFor(clazz, params).toString();
+		String canonicalUrl = RequestUtils.toAbsolutePath(relativeUrl);
+		return canonicalUrl;
+	}
+
 	protected String getLanguageCode() {
 		return GitBlitWebSession.get().getLocale().getLanguage();
 	}
@@ -129,6 +139,9 @@
 
 	@Override
 	protected void setHeaders(WebResponse response)	{
+		// set canonical link as http header for SEO (issue-304)
+		// https://support.google.com/webmasters/answer/139394?hl=en
+		response.setHeader("Link" ,MessageFormat.format("<{0}>; rel=\"canonical\"", getCanonicalUrl()));
 		int expires = GitBlit.getInteger(Keys.web.pageCacheExpires, 0);
 		if (expires > 0) {
 			// pages are personalized for the authenticated user so they must be

--
Gitblit v1.9.1