diff --git a/lib/modules/manager/npm/post-update/utils.ts b/lib/modules/manager/npm/post-update/utils.ts
index e799e3165285dc710f2ee0dd78ae6e97c2c230ec..6b3e246d11c27ea471e4fe6e8b83b938da795738 100644
--- a/lib/modules/manager/npm/post-update/utils.ts
+++ b/lib/modules/manager/npm/post-update/utils.ts
@@ -1,3 +1,4 @@
+import semver from 'semver';
 import upath from 'upath';
 import { logger } from '../../../../logger';
 import { readLocalFile } from '../../../../util/fs';
@@ -35,7 +36,10 @@ export function getPackageManagerVersion(
     logger.debug(
       `Found ${name} constraint in package.json packageManager: ${version}`,
     );
-    return version;
+    if (semver.valid(version)) {
+      return version;
+    }
+    return null;
   }
   if (pkg.engines?.[name]) {
     const version = pkg.engines[name];
diff --git a/lib/modules/manager/npm/post-update/yarn.spec.ts b/lib/modules/manager/npm/post-update/yarn.spec.ts
index 75be65cb52fa1b655c2064b090b3f0b2f14af839..005675b1ab665028248035b750b7851edc28f802 100644
--- a/lib/modules/manager/npm/post-update/yarn.spec.ts
+++ b/lib/modules/manager/npm/post-update/yarn.spec.ts
@@ -443,6 +443,53 @@ describe('modules/manager/npm/post-update/yarn', () => {
     expect(res.lockFile).toBe('package-lock-contents');
   });
 
+  it('supports packageManager url corepack', async () => {
+    process.env.CONTAINERBASE = 'true';
+    GlobalConfig.set({
+      localDir: '.',
+      binarySource: 'install',
+      cacheDir: '/tmp/cache',
+    });
+    const yarnLockContents = `__metadata:
+    version: 6
+    cacheKey: 8`;
+    Fixtures.mock(
+      {
+        'package.json':
+          '{ "packageManager": "yarn@https://nexus-proxy.repo.local.company.net/nexus/content/groups/npm-all/@yarnpkg/cli-dist/-/cli-dist-3.7.0.tgz#sha224.a06723957ae0292e21f598a453" }',
+        'yarn.lock': yarnLockContents,
+      },
+      'some-dir',
+    );
+    mockedFunction(getPkgReleases).mockResolvedValueOnce({
+      releases: [{ version: '0.10.0' }],
+    });
+    const execSnapshots = mockExecAll({
+      stdout: '2.1.0',
+      stderr: '',
+    });
+    const config = partial<PostUpdateConfig<NpmManagerData>>({
+      managerData: { hasPackageManager: true },
+    });
+    const res = await yarnHelper.generateLockFile('some-dir', {}, config);
+    expect(execSnapshots).toMatchObject([
+      { cmd: 'install-tool node 16.16.0', options: { cwd: 'some-dir' } },
+      { cmd: 'install-tool corepack 0.10.0', options: { cwd: 'some-dir' } },
+      {
+        cmd: 'yarn install --mode=update-lockfile',
+        options: {
+          cwd: 'some-dir',
+          env: {
+            YARN_ENABLE_GLOBAL_CACHE: '1',
+            YARN_ENABLE_IMMUTABLE_INSTALLS: 'false',
+            YARN_HTTP_TIMEOUT: '100000',
+          },
+        },
+      },
+    ]);
+    expect(res.lockFile).toBe(yarnLockContents);
+  });
+
   it('supports corepack on grouping', async () => {
     process.env.CONTAINERBASE = 'true';
     GlobalConfig.set({
diff --git a/lib/modules/manager/npm/schema.ts b/lib/modules/manager/npm/schema.ts
index 00847ca8c0210e5ddaf295bffd67c286c14c2ef1..79d986fea78507401cea91295ac57e542fa106ba 100644
--- a/lib/modules/manager/npm/schema.ts
+++ b/lib/modules/manager/npm/schema.ts
@@ -4,7 +4,7 @@ import { Json, LooseRecord } from '../../../util/schema-utils';
 export const PackageManagerSchema = z
   .string()
   .transform((val) => val.split('@'))
-  .transform(([name, version]) => ({ name, version }));
+  .transform(([name, ...version]) => ({ name, version: version.join('@') }));
 
 export const PackageJsonSchema = z.object({
   engines: LooseRecord(z.string()).optional(),