diff --git a/app/models/group.rb b/app/models/group.rb
index 552e1154df6ef3db621771a66cf175cb31384b04..d9e90cd256a9cc31e934a318b7bf695b32e11802 100644
--- a/app/models/group.rb
+++ b/app/models/group.rb
@@ -68,7 +68,7 @@ class Group < Namespace
   end
 
   def web_url
-    Gitlab::Routing.url_helpers.group_url(self)
+    Gitlab::Routing.url_helpers.group_canonical_url(self)
   end
 
   def human_name
diff --git a/config/routes/group.rb b/config/routes/group.rb
index 4838c9d91c6528b8aa6f3b3bdce9b8d5ed709afb..826048ba196cf9290cd624c4022f034860bbce2e 100644
--- a/config/routes/group.rb
+++ b/config/routes/group.rb
@@ -12,23 +12,26 @@ constraints(GroupUrlConstrainer.new) do
   end
 end
 
-resources :groups, constraints: { id: /[a-zA-Z.0-9_\-]+(?<!\.atom)/ }  do
-  member do
-    get :issues
-    get :merge_requests
-    get :projects
-    get :activity
-  end
-
-  scope module: :groups do
-    resources :group_members, only: [:index, :create, :update, :destroy], concerns: :access_requestable do
-      post :resend_invite, on: :member
-      delete :leave, on: :collection
+scope constraints: { id: /[a-zA-Z.0-9_\-]+(?<!\.atom)/ } do
+  resources :groups, except: [:show] do
+    member do
+      get :issues
+      get :merge_requests
+      get :projects
+      get :activity
     end
 
-    resource :avatar, only: [:destroy]
-    resources :milestones, constraints: { id: /[^\/]+/ }, only: [:index, :show, :update, :new, :create]
+    scope module: :groups do
+      resources :group_members, only: [:index, :create, :update, :destroy], concerns: :access_requestable do
+        post :resend_invite, on: :member
+        delete :leave, on: :collection
+      end
 
-    resources :labels, except: [:show], constraints: { id: /\d+/ }
+      resource :avatar, only: [:destroy]
+      resources :milestones, constraints: { id: /[^\/]+/ }, only: [:index, :show, :update, :new, :create]
+
+      resources :labels, except: [:show], constraints: { id: /\d+/ }
+    end
   end
+  get 'groups/:id' => 'groups#show', as: :group_canonical
 end
diff --git a/spec/models/group_spec.rb b/spec/models/group_spec.rb
index ac862055ebc145f071fded8a03b2d12bb93568b3..47f89f744cb74c1138ed82bf6487de865ef993bf 100644
--- a/spec/models/group_spec.rb
+++ b/spec/models/group_spec.rb
@@ -265,4 +265,10 @@ describe Group, models: true do
 
     members
   end
+
+  describe '#web_url' do
+    it 'returns the canonical URL' do
+      expect(group.web_url).to include("groups/#{group.name}")
+    end
+  end
 end