diff --git a/src/util/route.js b/src/util/route.js
index 9fee9c099..9cd20832a 100644
--- a/src/util/route.js
+++ b/src/util/route.js
@@ -74,6 +74,12 @@ export function isSameRoute (a: Route, b: ?Route): boolean {
 }
 
 function isObjectEqual (a = {}, b = {}): boolean {
+  if (a === null) {
+    return b === null
+  }
+  if (b === null) {
+    return false
+  }
   const aKeys = Object.keys(a)
   const bKeys = Object.keys(b)
   if (aKeys.length !== bKeys.length) {
diff --git a/test/unit/specs/route.spec.js b/test/unit/specs/route.spec.js
index e15f550f4..e79ceee76 100644
--- a/test/unit/specs/route.spec.js
+++ b/test/unit/specs/route.spec.js
@@ -47,6 +47,18 @@ describe('Route utils', () => {
       expect(isSameRoute(a, b)).toBe(true)
       expect(isSameRoute(a, c)).toBe(false)
     })
+
+    it('null values (regression test for #1566)', () => {
+      const a = {
+        path: '/abc',
+        query: { foo: 'bar' }
+      }
+      const b = {
+        path: '/abc',
+        query: { foo: null }
+      }
+      expect(isSameRoute(a, b)).toBe(false);
+    })
   })
 
   describe('isIncludedRoute', () => {