diff --git a/http/routing.hpp b/http/routing.hpp
index 3a7b9c2..3c0917f 100644
--- a/http/routing.hpp
+++ b/http/routing.hpp
@@ -1249,12 +1249,6 @@
         {
             asyncResp->res.addHeader(boost::beast::http::field::allow,
                                      allowHeader);
-
-            // If this is a header request, we're done.
-            if (req.method() == boost::beast::http::verb::head)
-            {
-                return;
-            }
         }
 
         const std::pair<unsigned, RoutingParams>& found = trie.find(req.url);
diff --git a/redfish-core/lib/service_root.hpp b/redfish-core/lib/service_root.hpp
index 387b614..4afd650 100644
--- a/redfish-core/lib/service_root.hpp
+++ b/redfish-core/lib/service_root.hpp
@@ -30,7 +30,21 @@
 {
 
 inline void
-    handleServiceRootGet(const std::shared_ptr<bmcweb::AsyncResp>& asyncResp)
+    handleServiceRootHead(App& app, const crow::Request& req,
+                          const std::shared_ptr<bmcweb::AsyncResp>& asyncResp)
+{
+    if (!redfish::setUpRedfishRoute(app, req, asyncResp))
+    {
+        return;
+    }
+
+    asyncResp->res.addHeader(
+        boost::beast::http::field::link,
+        "</redfish/v1/JsonSchemas/ServiceRoot/ServiceRoot.json>; rel=describedby");
+}
+
+inline void handleServiceRootGetImpl(
+    const std::shared_ptr<bmcweb::AsyncResp>& asyncResp)
 {
     std::string uuid = persistent_data::getConfig().systemUuid;
     asyncResp->res.jsonValue["@odata.type"] =
@@ -85,20 +99,24 @@
     protocolFeatures["DeepOperations"]["DeepPOST"] = false;
     protocolFeatures["DeepOperations"]["DeepPATCH"] = false;
 }
+inline void
+    handleServiceRootGet(App& app, const crow::Request& req,
+                         const std::shared_ptr<bmcweb::AsyncResp>& asyncResp)
+{
+    handleServiceRootHead(app, req, asyncResp);
+    handleServiceRootGetImpl(asyncResp);
+}
 
 inline void requestRoutesServiceRoot(App& app)
 {
     BMCWEB_ROUTE(app, "/redfish/v1/")
+        .privileges(redfish::privileges::headServiceRoot)
+        .methods(boost::beast::http::verb::head)(
+            std::bind_front(handleServiceRootHead, std::ref(app)));
+    BMCWEB_ROUTE(app, "/redfish/v1/")
         .privileges(redfish::privileges::getServiceRoot)
         .methods(boost::beast::http::verb::get)(
-            [&app](const crow::Request& req,
-                   const std::shared_ptr<bmcweb::AsyncResp>& asyncResp) {
-        if (!redfish::setUpRedfishRoute(app, req, asyncResp))
-        {
-            return;
-        }
-        handleServiceRootGet(asyncResp);
-        });
+            std::bind_front(handleServiceRootGet, std::ref(app)));
 }
 
 } // namespace redfish
diff --git a/redfish-core/lib/ut/service_root_test.cpp b/redfish-core/lib/ut/service_root_test.cpp
index 9b8744a..673f84c 100644
--- a/redfish-core/lib/ut/service_root_test.cpp
+++ b/redfish-core/lib/ut/service_root_test.cpp
@@ -116,8 +116,8 @@
 
     shareAsyncResp->res.setCompleteRequestHandler(assertServiceRootGet);
 
-    handleServiceRootGet(shareAsyncResp);
+    redfish::handleServiceRootGetImpl(shareAsyncResp);
 }
 
 } // namespace
-} // namespace redfish
\ No newline at end of file
+} // namespace redfish
