diff --git a/src/providers/wms/qgswmscapabilities.cpp b/src/providers/wms/qgswmscapabilities.cpp
index 7a7f59d4667..0d09b46be05 100644
--- a/src/providers/wms/qgswmscapabilities.cpp
+++ b/src/providers/wms/qgswmscapabilities.cpp
@@ -783,6 +783,34 @@ void QgsWmsCapabilities::parseLegendUrl( QDomElement const &e, QgsWmsLegendUrlPr
   QgsDebugMsg( QStringLiteral( "exiting." ) );
 }
 
+void QgsWmsCapabilities::parseMetadataUrl( QDomElement const &e, QgsWmsMetadataUrlProperty &metadataUrlProperty )
+{
+
+  QDomNode n1 = e.firstChild();
+  while ( !n1.isNull() )
+  {
+    QDomElement e1 = n1.toElement(); // try to convert the node to an element.
+    if ( !e1.isNull() )
+    {
+      QString tagName = e1.tagName();
+      if ( tagName.startsWith( QLatin1String( "wms:" ) ) )
+        tagName = tagName.mid( 4 );
+
+      if ( tagName == QLatin1String( "Format" ) )
+      {
+        metadataUrlProperty.format = e1.text();
+      }
+      else if ( tagName == QLatin1String( "OnlineResource" ) )
+      {
+        parseOnlineResource( e1, metadataUrlProperty.onlineResource );
+      }
+    }
+    n1 = n1.nextSibling();
+  }
+
+  QgsDebugMsg( QStringLiteral( "exiting." ) );
+}
+
 void QgsWmsCapabilities::parseLayer( QDomElement const &e, QgsWmsLayerProperty &layerProperty,
                                      QgsWmsLayerProperty *parentProperty )
 {
@@ -972,7 +1000,8 @@ void QgsWmsCapabilities::parseLayer( QDomElement const &e, QgsWmsLayerProperty &
       }
       else if ( tagName == QLatin1String( "MetadataURL" ) )
       {
-        // TODO
+        layerProperty.metadataUrl << QgsWmsMetadataUrlProperty();
+        parseMetadataUrl( e1, layerProperty.metadataUrl.last() );
       }
       else if ( tagName == QLatin1String( "DataURL" ) )
       {
diff --git a/src/providers/wms/qgswmscapabilities.h b/src/providers/wms/qgswmscapabilities.h
index bcbaf29605f..47b12210402 100644
--- a/src/providers/wms/qgswmscapabilities.h
+++ b/src/providers/wms/qgswmscapabilities.h
@@ -692,6 +692,7 @@ class QgsWmsCapabilities
     void parseCapability( QDomElement const &e, QgsWmsCapabilityProperty &capabilityProperty );
     void parseRequest( QDomElement const &e, QgsWmsRequestProperty &requestProperty );
     void parseLegendUrl( QDomElement const &e, QgsWmsLegendUrlProperty &legendUrlProperty );
+    void parseMetadataUrl( QDomElement const &e, QgsWmsMetadataUrlProperty &metadataUrlProperty );
     void parseLayer( QDomElement const &e, QgsWmsLayerProperty &layerProperty, QgsWmsLayerProperty *parentProperty = nullptr );
     void parseStyle( QDomElement const &e, QgsWmsStyleProperty &styleProperty );
 
diff --git a/src/providers/wms/qgswmsprovider.cpp b/src/providers/wms/qgswmsprovider.cpp
index fe536e6e6c8..a7e50396cd8 100644
--- a/src/providers/wms/qgswmsprovider.cpp
+++ b/src/providers/wms/qgswmsprovider.cpp
@@ -1751,24 +1751,6 @@ QString QgsWmsProvider::layerMetadata( QgsWmsLayerProperty &layer )
     QStringLiteral( "</td>"
                     "<td>" ) %
     layer.title;
-
-    // Metadata URLs
-    if ( !layer.metadataUrl.isEmpty() )
-    {
-      metadata += QStringLiteral("</td></tr>" );
-      metadata += QStringLiteral( "<tr><th>" ) %
-                  tr( "MetadataURLs" ) %
-                  QStringLiteral( "</th>"
-                                  "<td><table class=\"tabular-view\">"
-                                  "<tr><th>Format</th><th>URL</th></tr>" );
-      for ( int k = 0; k < layer.metadataUrl.size(); k++ )
-      {
-        const QgsWmsMetadataUrlProperty &l = layer.metadataUrl[k];
-        metadata += QStringLiteral( "<tr><td>" ) % l.format % QStringLiteral( "</td><td>" ) % l.onlineResource.xlinkHref % QStringLiteral( "</td></tr>" );
-      }
-      metadata += QStringLiteral( "</table>" );
-    }
-
   QStringLiteral( "</td></tr>"
 
                   // Layer Abstract
@@ -1827,6 +1809,23 @@ QString QgsWmsProvider::layerMetadata( QgsWmsLayerProperty &layer )
   QString::number( layer.fixedHeight ) %
   QStringLiteral( "</td></tr>" );
 
+  // Metadata URLs
+  if ( !layer.metadataUrl.isEmpty() )
+  {
+    metadata += QStringLiteral( "<tr><th>" ) %
+                tr( "MetadataURLs" ) %
+                QStringLiteral( "</th>"
+                                "<td><table class=\"tabular-view\">"
+                                "<tr><th>Format</th><th>URL</th></tr>" );
+    for ( int k = 0; k < layer.metadataUrl.size(); k++ )
+    {
+      const QgsWmsMetadataUrlProperty &l = layer.metadataUrl[k];
+      metadata += QStringLiteral( "<tr><td>" ) % l.format % QStringLiteral( "</td><td>" ) % l.onlineResource.xlinkHref % QStringLiteral( "</td></tr>" );
+    }
+    metadata += QStringLiteral( "</table>"
+                                "</td></tr>"  );
+  }
+
   // Layer Coordinate Reference Systems
   for ( int j = 0; j < std::min( layer.crs.size(), 10 ); j++ )
   {