diff --git a/swh/lister/gnu/tests/data/https_ftp.gnu.org/tree.json.gz b/swh/lister/gnu/tests/data/https_ftp.gnu.org/tree.json.gz
index 34b3b28a09e0c92683ef85c046441ecdd6aa9c23..21424731e26ff05ba327b84012d26e4e3af393d2 100644
Binary files a/swh/lister/gnu/tests/data/https_ftp.gnu.org/tree.json.gz and b/swh/lister/gnu/tests/data/https_ftp.gnu.org/tree.json.gz differ
diff --git a/swh/lister/gnu/tests/data/tree.json b/swh/lister/gnu/tests/data/tree.json
index e4a99d4bc5f0672672af99a3fa2ed453880f4c2b..1f2bb9fa58cba57d721f127a86e43121aa958988 100644
--- a/swh/lister/gnu/tests/data/tree.json
+++ b/swh/lister/gnu/tests/data/tree.json
@@ -69,5 +69,6 @@
         {"type":"file","name":"xboard-4.2.5.tar.gz","size":1055502,"time":"1008466945"},
         {"type":"file","name":"xboard-4.2.6.tar.gz","size":1057625,"time":"1012641715"},
         {"type":"file","name":"xboard-4.2.7.tar.gz","size":1318110,"time":"1070057764"}
-      ]}
+      ]},
+      {"type":"directory","name":"no-contents","size":4096,"time":"1254860068"}
 ]
diff --git a/swh/lister/gnu/tree.py b/swh/lister/gnu/tree.py
index ec48cf089f7029c1f9e9e82c6c8c6d33763fd481..26e4f2b86ce16027d4cb0b2d66fc72b74db63775 100644
--- a/swh/lister/gnu/tree.py
+++ b/swh/lister/gnu/tree.py
@@ -61,7 +61,7 @@ class GNUTree:
         for directory in raw_data["contents"]:
             if directory["name"] not in self.top_level_directories:
                 continue
-            infos = directory["contents"]
+            infos = directory.get("contents", [])
             for info in infos:
                 if info["type"] == "directory":
                     package_url = "%s/%s/%s/" % (
@@ -69,7 +69,9 @@ class GNUTree:
                         directory["name"],
                         info["name"],
                     )
-                    package_artifacts = find_artifacts(info["contents"], package_url)
+                    package_artifacts = find_artifacts(
+                        info.get("contents", []), package_url
+                    )
                     if package_artifacts != []:
                         repo_details = {
                             "name": info["name"],
@@ -146,7 +148,7 @@ def find_artifacts(
         # It will recursively check for artifacts in all sub-folders
         elif filetype == "directory":
             tarballs_in_dir = find_artifacts(
-                info_file["contents"], url + filename + "/"
+                info_file.get("contents", []), url + filename + "/"
             )
             artifacts.extend(tarballs_in_dir)