externalizing deploy url for canonical url. this closes freemarker/docgen#10
diff --git a/src/main/org/freemarker/docgen/Transform.java b/src/main/org/freemarker/docgen/Transform.java
index 0f434cf..54e2e56 100644
--- a/src/main/org/freemarker/docgen/Transform.java
+++ b/src/main/org/freemarker/docgen/Transform.java
@@ -114,7 +114,8 @@
  *            If it was already specified via {@link #setOffline(Boolean)}, then
  *            that has priority. If it wasn't specified via {@link #setOffline(Boolean)},
  *            then it's mandatory to set.
- *
+ *         <li><p><tt>deployUrl</tt> (string): Url the page is deployed to (used
+ *            for canonical urls)
  *         <li><p><tt>olinks</tt> (map):
  *            Maps <tt>olink</tt> <tt>targetdoc</tt> attribute values to
  *            actual URL-s.
@@ -346,6 +347,7 @@
 
     static final String SETTING_VALIDATION = "validation";
     static final String SETTING_OFFLINE = "offline";
+    static final String SETTING_DEPLOY_URL = "deployUrl";
     static final String SETTING_ONLINE_TRACKER_HTML = "onlineTrackerHTML";
     static final String SETTING_INTERNAL_BOOKMARKS = "internalBookmarks";
     static final String SETTING_EXTERNAL_BOOKMARKS = "externalBookmarks";
@@ -389,6 +391,8 @@
 
     private static final String VAR_OFFLINE
             = SETTING_OFFLINE;
+    private static final String VAR_DEPLOY_URL
+            = SETTING_DEPLOY_URL;
     private static final String VAR_ONLINE_TRACKER_HTML
             = SETTING_ONLINE_TRACKER_HTML;
     private static final String VAR_SHOW_EDITORAL_NOTES
@@ -542,6 +546,8 @@
 
     private Boolean offline;
 
+    private String deployUrl;
+
     private String onlineTrackerHTML;
 
     /** Element types for which a new output file is created  */
@@ -793,6 +799,8 @@
                     if (offline == null) {  // Ignore if the caller has already set this
                         offline = itIsABooleanSetting(cfgFile, settingName, settingValue);
                     }
+                } else if (settingName.equals(SETTING_DEPLOY_URL)) {
+                    deployUrl = itIsAStringSetting(cfgFile, settingName, settingValue);
                 } else if (settingName.equals(SETTING_ONLINE_TRACKER_HTML)) {
                     String onlineTrackerHtmlPath = itIsAStringSetting(cfgFile, settingName, settingValue);
                     File f = new File(getSourceDirectory(), onlineTrackerHtmlPath);
@@ -1035,6 +1043,8 @@
             fmConfig.setSharedVariable(
                     VAR_OFFLINE, offline);
             fmConfig.setSharedVariable(
+                    VAR_DEPLOY_URL, deployUrl);                    
+            fmConfig.setSharedVariable(
                     VAR_ONLINE_TRACKER_HTML, onlineTrackerHTML);
             fmConfig.setSharedVariable(
                     VAR_SHOW_EDITORAL_NOTES, showEditoralNotes);
diff --git a/src/main/org/freemarker/docgen/templates/page.ftl b/src/main/org/freemarker/docgen/templates/page.ftl
index 6e0656c..291728c 100644
--- a/src/main/org/freemarker/docgen/templates/page.ftl
+++ b/src/main/org/freemarker/docgen/templates/page.ftl
@@ -35,9 +35,11 @@
   <#if nodeId == "autoid_1">
     <#assign nodeId = "index">
   </#if>
-  <#assign canonicalUrl = "http://freemarker.org/docs/${nodeId}.html"><#-- @todo: remove hard-coded domain -->
-  <meta property="og:url" content="${canonicalUrl}">
-  <link rel="canoical" href="${canonicalUrl}">
+  <#if deployUrl??>
+    <#assign canonicalUrl = "${deployUrl + nodeId}.html">
+    <meta property="og:url" content="${canonicalUrl}">
+    <link rel="canoical" href="${canonicalUrl}">
+  </#if>
 
   <!--[if gt IE 9]><!-->
   <link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400|Droid+Sans+Mono">