diff --git a/lib/modules/versioning/generic.spec.ts b/lib/modules/versioning/generic.spec.ts
index 71c78b366b802ae415e73e7123e9f33c9510d904..4308a70abf4356177b455ee64a3b2d8f5a545105 100644
--- a/lib/modules/versioning/generic.spec.ts
+++ b/lib/modules/versioning/generic.spec.ts
@@ -32,19 +32,18 @@ describe('modules/versioning/generic', () => {
 
   describe('GenericVersioningApi', () => {
     class DummyScheme extends GenericVersioningApi {
-      protected override _compare(_version: string, _other: string): number {
-        return _version ? _version.localeCompare(_other) : 0;
-      }
-
       protected _parse(_version: string): GenericVersion | null {
         const matchGroups = _version.match(
-          /^(?<major>\d)\.(?<minor>\d)\.(?<patch>\d)$/,
+          /^(?<major>\d)\.(?<minor>\d)\.(?<patch>\d)(?:-(?<prerelease>.+))?$/,
         )?.groups;
         if (!matchGroups) {
           return null;
         }
-        const { major, minor, patch } = matchGroups;
-        return { release: [major, minor, patch].map((n) => parseInt(n, 10)) };
+        const { major, minor, patch, prerelease } = matchGroups;
+        return {
+          release: [major, minor, patch].map((n) => parseInt(n, 10)),
+          prerelease,
+        };
       }
     }
 
@@ -126,6 +125,7 @@ describe('modules/versioning/generic', () => {
     it('isGreaterThan', () => {
       expect(api.isGreaterThan('1.2.3', '3.2.1')).toBe(false);
       expect(api.isGreaterThan('3.2.1', '1.2.3')).toBe(true);
+      expect(api.isGreaterThan('1.2.3-a10', '1.2.3-a1')).toBe(true);
     });
 
     it('isSingleVersion', () => {
@@ -138,6 +138,7 @@ describe('modules/versioning/generic', () => {
 
     it('isValid', () => {
       expect(api.isValid('1.2.3')).toBe(true);
+      expect(api.isValid('1.2.3-a1')).toBe(true);
       expect(api.isValid('invalid')).toBe(false);
     });
 
@@ -153,8 +154,8 @@ describe('modules/versioning/generic', () => {
 
     it('sortVersions', () => {
       expect(api.sortVersions('1.2.3', '1.2.3')).toBe(0);
-      expect(api.sortVersions('1.2.3', '3.2.1')).toBe(-1);
-      expect(api.sortVersions('3.2.1', '1.2.3')).toBe(1);
+      expect(api.sortVersions('1.2.3', '3.2.1')).toBe(-2);
+      expect(api.sortVersions('3.2.1', '1.2.3')).toBe(2);
     });
 
     it('isLessThanRange', () => {
diff --git a/lib/modules/versioning/generic.ts b/lib/modules/versioning/generic.ts
index d1a2d612d04f790659c61857eb5014286934d920..35710926d33a5230630656287b682ae37bc7839e 100644
--- a/lib/modules/versioning/generic.ts
+++ b/lib/modules/versioning/generic.ts
@@ -50,7 +50,9 @@ export abstract class GenericVersioningApi<
       is.nonEmptyString(left.prerelease) &&
       is.nonEmptyString(right.prerelease)
     ) {
-      const pre = left.prerelease.localeCompare(right.prerelease);
+      const pre = left.prerelease.localeCompare(right.prerelease, undefined, {
+        numeric: true,
+      });
 
       if (pre !== 0) {
         return pre;