diff --git a/resources/static/pages/start.js b/resources/static/pages/start.js
index f2adcff0762c3dfea55ee3ea8efb65a4bfc6ef65..34e4c2dec70f3cfdc4588a875a3ad1f4e09198ce 100644
--- a/resources/static/pages/start.js
+++ b/resources/static/pages/start.js
@@ -11,6 +11,7 @@ $(function() {
    */
 
   var bid = BrowserID,
+      helpers = bid.Helpers,
       pageHelpers = bid.PageHelpers,
       user = bid.User,
       dom = bid.DOM,
@@ -79,6 +80,11 @@ $(function() {
     else if(token && path === "/verify_email_address") {
       bid.verifyEmailAddress(token);
     }
+    else {
+      // Instead of throwing a hard error here, adding a message to the console
+      // to let developers know something is up.
+      helpers.log("unknown path");
+    }
 
     user.checkAuthentication(function(authenticated) {
       if (authenticated) {
diff --git a/resources/static/shared/helpers.js b/resources/static/shared/helpers.js
index 8b2d99794caee0aca5205e818d8d5c697a4a3570..7f536f6b61a5ad65e156c14c86f14b239a060648 100644
--- a/resources/static/shared/helpers.js
+++ b/resources/static/shared/helpers.js
@@ -67,6 +67,15 @@
     }
   }
 
+  function log(msg) {
+    try {
+      window.console.log(msg);
+    } catch(e) {
+      // Catch all if console is not available or if it for some reason blows
+      // up. Do nothing.
+    }
+  }
+
   extend(helpers, {
     /**
      * Extend an object with the properties of another object.  Overwrites
@@ -116,7 +125,14 @@
      * parameter is a function.
      * @param {variant} [params] - parameters to pass to callback.
      */
-    complete: complete
+    complete: complete,
+
+    /**
+     * If the console is available, log a message to it.
+     * @method log
+     * @param {string} msg
+     */
+    log: log
   });
 
 
diff --git a/resources/static/test/cases/shared/helpers.js b/resources/static/test/cases/shared/helpers.js
index 7e0a171def4e844649bfa204153118211c72755e..8ebdd3f7dd92c4d01e0ad85ad3785759df892254 100644
--- a/resources/static/test/cases/shared/helpers.js
+++ b/resources/static/test/cases/shared/helpers.js
@@ -103,4 +103,65 @@
 
     equal(url, "https://browserid.org?email=testuser%40testuser.com&status=complete", "correct URL with GET parameters");
   });
+
+  test("simulate log on browser without console - no exception thrown", function() {
+    var err,
+        nativeConsole = window.console;
+
+    // Simulate browser without window.console.
+    window.console = undefined;
+    try {
+      helpers.log("test message");
+    }
+    catch(e) {
+      err = e;
+    }
+
+    equal(typeof err, "undefined", "no exception thrown");
+
+    window.console = nativeConsole;
+  });
+
+  test("simulate log on browser without console.log - no exception thrown", function() {
+    var err,
+        nativeConsole = window.console;
+
+    // Simulate browser with console, but without console.log.
+    window.console = {};
+    try {
+      helpers.log("test message");
+    }
+    catch(e) {
+      err = e;
+    }
+
+    equal(typeof err, "undefined", "no exception thrown");
+
+    window.console = nativeConsole;
+  });
+
+  test("simulate log on browser with console.log - prints message", function() {
+    var err,
+        loggedMessage,
+        nativeConsole = window.console;
+
+    // Simulate browser with console and console.log
+    window.console = {
+      log: function(msg) {
+        loggedMessage = msg;
+      }
+    };
+
+    try {
+      helpers.log("test message");
+    }
+    catch(e) {
+      err = e;
+    }
+
+    equal(typeof err, "undefined", "no exception thrown");
+    equal(loggedMessage, "test message", "correct message logged");
+
+    window.console = nativeConsole;
+  });
 }());