diff --git a/lib/modules/manager/npm/post-update/pnpm.spec.ts b/lib/modules/manager/npm/post-update/pnpm.spec.ts
index c3f36744d8cc3a811fe7f5a1996cff832380c136..6c2fab912a7f6eefb9d39c9c7b7b13eb119678fe 100644
--- a/lib/modules/manager/npm/post-update/pnpm.spec.ts
+++ b/lib/modules/manager/npm/post-update/pnpm.spec.ts
@@ -163,4 +163,20 @@ describe('modules/manager/npm/post-update/pnpm', () => {
       },
     ]);
   });
+
+  it('uses skips pnpm v7 if lockfileVersion indicates <7', async () => {
+    mockExecAll(exec);
+    const configTemp = partial<PostUpdateConfig>({});
+    fs.readLocalFile
+      .mockResolvedValueOnce('{}') // package.json
+      .mockResolvedValue('lockfileVersion: 5.3\n'); // pnpm-lock.yaml
+    const res = await pnpmHelper.generateLockFile(
+      'some-folder',
+      {},
+      configTemp,
+      []
+    );
+    expect(fs.readLocalFile).toHaveBeenCalledTimes(3);
+    expect(res.lockFile).toBe('lockfileVersion: 5.3\n');
+  });
 });
diff --git a/lib/modules/manager/npm/post-update/pnpm.ts b/lib/modules/manager/npm/post-update/pnpm.ts
index 9b246544fb4cb020f2a78488aaad84a88d3f7965..4b61b802448da9c24d934cabaa24db4288566ab5 100644
--- a/lib/modules/manager/npm/post-update/pnpm.ts
+++ b/lib/modules/manager/npm/post-update/pnpm.ts
@@ -1,3 +1,5 @@
+import is from '@sindresorhus/is';
+import { load } from 'js-yaml';
 import upath from 'upath';
 import { GlobalConfig } from '../../../../config/global';
 import { TEMPORARY_ERROR } from '../../../../constants/error-messages';
@@ -12,7 +14,7 @@ import { deleteLocalFile, readLocalFile } from '../../../../util/fs';
 import type { PostUpdateConfig, Upgrade } from '../../types';
 import type { NpmPackage } from '../extract/types';
 import { getNodeConstraint } from './node-version';
-import type { GenerateLockFileResult } from './types';
+import type { GenerateLockFileResult, PnpmLockFile } from './types';
 
 export async function generateLockFile(
   lockFileDir: string,
@@ -117,5 +119,18 @@ async function getPnpmContraint(
       }
     }
   }
+  if (!result) {
+    const lockFileName = upath.join(lockFileDir, 'pnpm-lock.yaml');
+    const content = await readLocalFile(lockFileName, 'utf8');
+    if (content) {
+      const pnpmLock = load(content) as PnpmLockFile;
+      if (
+        is.number(pnpmLock.lockfileVersion) &&
+        pnpmLock.lockfileVersion < 5.4
+      ) {
+        result = '<7';
+      }
+    }
+  }
   return result;
 }
diff --git a/lib/modules/manager/npm/post-update/types.ts b/lib/modules/manager/npm/post-update/types.ts
index de1bfe88245039aa9de4ef29b8d6b1e5097f028c..7ba05ca902ec467797b0edcfc93df146a0e11099 100644
--- a/lib/modules/manager/npm/post-update/types.ts
+++ b/lib/modules/manager/npm/post-update/types.ts
@@ -28,3 +28,7 @@ export interface GenerateLockFileResult {
   stderr?: string;
   stdout?: string;
 }
+
+export interface PnpmLockFile {
+  lockfileVersion?: number;
+}