diff --git a/lib/modules/datasource/metadata.ts b/lib/modules/datasource/metadata.ts
index 68806fe2e9c2869aa69e6397b946dbfa0f6dad75..1503f4ba6e110c644ae22f801a26fd464d9c8b92 100644
--- a/lib/modules/datasource/metadata.ts
+++ b/lib/modules/datasource/metadata.ts
@@ -4,13 +4,24 @@ import parse from 'github-url-from-git';
 import { DateTime } from 'luxon';
 import * as hostRules from '../../util/host-rules';
 import { regEx } from '../../util/regex';
-import { validateUrl } from '../../util/url';
+import { parseUrl, validateUrl } from '../../util/url';
 import { manualChangelogUrls, manualSourceUrls } from './metadata-manual';
 import type { ReleaseResult } from './types';
 
 const githubPages = regEx('^https://([^.]+).github.com/([^/]+)$');
 const gitPrefix = regEx('^git:/?/?');
 
+export function massageUrl(sourceUrl: string): string {
+  const parsedUrl = URL.parse(sourceUrl);
+  if (!parsedUrl?.hostname) {
+    return '';
+  }
+  if (parsedUrl.hostname.includes('gitlab')) {
+    return massageGitlabUrl(sourceUrl);
+  }
+  return massageGithubUrl(sourceUrl);
+}
+
 export function massageGithubUrl(url: string): string {
   let massagedUrl = url;
 
@@ -34,7 +45,7 @@ export function massageGithubUrl(url: string): string {
 function massageGitlabUrl(url: string): string {
   return url
     .replace('http:', 'https:')
-    .replace(regEx(/^git:\/?\/?/), 'https://')
+    .replace(gitPrefix, 'https://')
     .replace(regEx(/\/tree\/.*$/i), '')
     .replace(regEx(/\/$/i), '')
     .replace('.git', '');
@@ -114,12 +125,15 @@ export function addMetaData(
   ) {
     dep.sourceUrl = dep.changelogUrl;
   }
-  // prettier-ignore
-  if (dep.homepage?.includes('github.com')) { // lgtm [js/incomplete-url-substring-sanitization]
-    if (!dep.sourceUrl) {
-      dep.sourceUrl = dep.homepage;
+
+  if (dep.homepage) {
+    const parsedHomePage = parseUrl(dep.homepage);
+    if (parsedHomePage?.hostname.includes('github')) {
+      if (!dep.sourceUrl) {
+        dep.sourceUrl = dep.homepage;
+      }
+      delete dep.homepage;
     }
-    delete dep.homepage;
   }
   const extraBaseUrls = [];
   // istanbul ignore next
@@ -128,21 +142,15 @@ export function addMetaData(
   });
   extraBaseUrls.push('gitlab.com');
   if (dep.sourceUrl) {
-    const parsedUrl = URL.parse(dep.sourceUrl);
-    if (parsedUrl?.hostname) {
-      let massagedUrl;
-      if (parsedUrl.hostname.includes('gitlab')) {
-        massagedUrl = massageGitlabUrl(dep.sourceUrl);
-      } else {
-        massagedUrl = massageGithubUrl(dep.sourceUrl);
-      }
+    const massagedUrl = massageUrl(dep.sourceUrl);
+    if (is.emptyString(massagedUrl)) {
+      delete dep.sourceUrl;
+    } else {
       // try massaging it
       dep.sourceUrl =
         parse(massagedUrl, {
           extraBaseUrls,
         }) || dep.sourceUrl;
-    } else {
-      delete dep.sourceUrl;
     }
   }