diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/DebugRenderer.java b/gitiles-servlet/src/main/java/com/google/gitiles/DebugRenderer.java
index e56518a..366191a 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/DebugRenderer.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/DebugRenderer.java
@@ -28,7 +28,7 @@
 /** Renderer that reloads Soy templates from the filesystem on every request. */
 public class DebugRenderer extends Renderer {
   public DebugRenderer(String staticPrefix, String customTemplatesFilename,
-      final String soyTemplatesRoot) {
+      final String soyTemplatesRoot, String siteTitle) {
     super(
         new Function<String, URL>() {
           @Override
@@ -37,7 +37,7 @@
           }
         },
         ImmutableMap.<String, String> of(), staticPrefix,
-        toFileURL(customTemplatesFilename));
+        toFileURL(customTemplatesFilename), siteTitle);
   }
 
   @Override
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/DefaultRenderer.java b/gitiles-servlet/src/main/java/com/google/gitiles/DefaultRenderer.java
index f4bd1fb..e2eef7c 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/DefaultRenderer.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/DefaultRenderer.java
@@ -28,14 +28,15 @@
   private final SoyTofu tofu;
 
   DefaultRenderer() {
-    this("", null);
+    this("", null, "");
   }
 
-  public DefaultRenderer(String staticPrefix, URL customTemplates) {
-    this(ImmutableMap.<String, String> of(), staticPrefix, customTemplates);
+  public DefaultRenderer(String staticPrefix, URL customTemplates, String siteTitle) {
+    this(ImmutableMap.<String, String> of(), staticPrefix, customTemplates, siteTitle);
   }
 
-  public DefaultRenderer(Map<String, String> globals, String staticPrefix, URL customTemplates) {
+  public DefaultRenderer(Map<String, String> globals, String staticPrefix, URL customTemplates,
+      String siteTitle) {
     super(
         new Function<String, URL>() {
           @Override
@@ -43,7 +44,7 @@
             return Resources.getResource(Renderer.class, "templates/" + name);
           }
         },
-        globals, staticPrefix, customTemplates);
+        globals, staticPrefix, customTemplates, siteTitle);
     SoyFileSet.Builder builder = new SoyFileSet.Builder()
         .setCompileTimeGlobals(this.globals);
     for (URL template : templates) {
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/GitilesFilter.java b/gitiles-servlet/src/main/java/com/google/gitiles/GitilesFilter.java
index dd8905e..e2cc699 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/GitilesFilter.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/GitilesFilter.java
@@ -21,6 +21,7 @@
 
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Joiner;
+import com.google.common.base.Objects;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.LinkedListMultimap;
 import com.google.common.collect.ListMultimap;
@@ -282,14 +283,17 @@
     if (renderer == null) {
       String staticPrefix = config.getServletContext().getContextPath() + STATIC_PREFIX;
       String customTemplates = jgitConfig.getString("gitiles", null, "customTemplates");
+      String siteTitle = Objects.firstNonNull(jgitConfig.getString("gitiles", null, "siteTitle"),
+          "Gitiles");
       // TODO(dborowitz): Automatically set to true when run with mvn jetty:run.
       if (jgitConfig.getBoolean("gitiles", null, "reloadTemplates", false)) {
         renderer = new DebugRenderer(staticPrefix, customTemplates,
             Joiner.on(File.separatorChar).join(System.getProperty("user.dir"),
                 "gitiles-servlet", "src", "main", "resources",
-                "com", "google", "gitiles", "templates"));
+                "com", "google", "gitiles", "templates"), siteTitle);
       } else {
-        renderer = new DefaultRenderer(staticPrefix, Renderer.toFileURL(customTemplates));
+        renderer = new DefaultRenderer(staticPrefix, Renderer.toFileURL(customTemplates),
+            siteTitle);
       }
     }
     if (urls == null) {
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/Renderer.java b/gitiles-servlet/src/main/java/com/google/gitiles/Renderer.java
index 42ce635..dc4f680 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/Renderer.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/Renderer.java
@@ -65,7 +65,7 @@
   protected ImmutableMap<String, String> globals;
 
   protected Renderer(Function<String, URL> resourceMapper, Map<String, String> globals,
-      String staticPrefix, URL customTemplates) {
+      String staticPrefix, URL customTemplates, String siteTitle) {
     checkNotNull(staticPrefix, "staticPrefix");
     List<URL> allTemplates = Lists.newArrayListWithCapacity(SOY_FILENAMES.size() + 1);
     for (String filename : SOY_FILENAMES) {
@@ -82,6 +82,7 @@
     for (Map.Entry<String, String> e : STATIC_URL_GLOBALS.entrySet()) {
       allGlobals.put(e.getKey(), staticPrefix + e.getValue());
     }
+    allGlobals.put("gitiles.SITE_TITLE", siteTitle);
     allGlobals.putAll(globals);
     this.globals = ImmutableMap.copyOf(allGlobals);
   }
diff --git a/gitiles-servlet/src/main/resources/com/google/gitiles/templates/Common.soy b/gitiles-servlet/src/main/resources/com/google/gitiles/templates/Common.soy
index 4297d31..908f2fd 100644
--- a/gitiles-servlet/src/main/resources/com/google/gitiles/templates/Common.soy
+++ b/gitiles-servlet/src/main/resources/com/google/gitiles/templates/Common.soy
@@ -36,7 +36,7 @@
     {if $repositoryName}
       {sp}- {$repositoryName}
     {/if}
-    {sp}- {msg desc="name of the application"}Git at Google{/msg}
+    {sp}- {msg desc="name of the application"}{gitiles.SITE_TITLE}{/msg}
   </title>
   <link rel="stylesheet" type="text/css" href="//www.google.com/css/go.css" />
 
