diff --git a/lib/modules/manager/npm/__fixtures__/pnpm-monorepo/pnpm-lock.yaml b/lib/modules/manager/npm/__fixtures__/pnpm-monorepo/pnpm-lock.yaml
index 5bb04ac300807e9748851c8940f4c8f484b95137..176b4fd082e0065554eb9856671c754810e50010 100644
--- a/lib/modules/manager/npm/__fixtures__/pnpm-monorepo/pnpm-lock.yaml
+++ b/lib/modules/manager/npm/__fixtures__/pnpm-monorepo/pnpm-lock.yaml
@@ -56,6 +56,18 @@ importers:
     dependencies:
       dotenv: 9.0.2
 
+  test/test-package:
+    specifiers:
+      dotenv: ^9.0.2
+    dependencies:
+      dotenv: 9.0.2
+
+  tests/test-package2:
+    specifiers:
+      dotenv: ^9.0.2
+    dependencies:
+      dotenv: 9.0.2
+
 packages:
 
   /ansi-styles/3.2.1:
diff --git a/lib/modules/manager/npm/__fixtures__/pnpm-monorepo/pnpm-workspace.yaml b/lib/modules/manager/npm/__fixtures__/pnpm-monorepo/pnpm-workspace.yaml
index 6298802ab9d90cbb0642b51bc13084a36a3bce9a..fead9b1be6dcf9cfca5e0e0757b8ce135b6aa2ee 100644
--- a/lib/modules/manager/npm/__fixtures__/pnpm-monorepo/pnpm-workspace.yaml
+++ b/lib/modules/manager/npm/__fixtures__/pnpm-monorepo/pnpm-workspace.yaml
@@ -6,3 +6,5 @@ packages:
   - 'solo-package-trailing-slash/'
   - './solo-package-leading-dot-slash'
   - '../pnpm-monorepo/solo-package-leading-double-dot-slash'
+  - 'test/*'
+  - 'tests/*'
diff --git a/lib/modules/manager/npm/__fixtures__/pnpm-monorepo/test/test-package/package.json b/lib/modules/manager/npm/__fixtures__/pnpm-monorepo/test/test-package/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..9e85715cf5911bde4b5bbcd848af128ea06b7ed3
--- /dev/null
+++ b/lib/modules/manager/npm/__fixtures__/pnpm-monorepo/test/test-package/package.json
@@ -0,0 +1,12 @@
+{
+  "name": "@demo/test-package",
+  "version": "1.0.0",
+  "description": "",
+  "main": "index.js",
+  "scripts": {
+    "test": "echo \"Error: no test specified\" && exit 1"
+  },
+  "dependencies": {
+    "dotenv": "^9.0.2"
+  }
+}
diff --git a/lib/modules/manager/npm/__fixtures__/pnpm-monorepo/tests/test-package2/package.json b/lib/modules/manager/npm/__fixtures__/pnpm-monorepo/tests/test-package2/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..9d394f90a4babc02ae7f0ba3bf388dd0aff8e5ea
--- /dev/null
+++ b/lib/modules/manager/npm/__fixtures__/pnpm-monorepo/tests/test-package2/package.json
@@ -0,0 +1,12 @@
+{
+  "name": "@demo/test-package2",
+  "version": "1.0.0",
+  "description": "",
+  "main": "index.js",
+  "scripts": {
+    "test": "echo \"Error: no test specified\" && exit 1"
+  },
+  "dependencies": {
+    "dotenv": "^9.0.2"
+  }
+}
diff --git a/lib/modules/manager/npm/extract/__snapshots__/pnpm.spec.ts.snap b/lib/modules/manager/npm/extract/__snapshots__/pnpm.spec.ts.snap
index 39c9a658685e46a438935fa35884155ccf7880ef..fe4966f7307298be42ed28cc7eca876a1b9095f2 100644
--- a/lib/modules/manager/npm/extract/__snapshots__/pnpm.spec.ts.snap
+++ b/lib/modules/manager/npm/extract/__snapshots__/pnpm.spec.ts.snap
@@ -46,5 +46,15 @@ exports[`modules/manager/npm/extract/pnpm .detectPnpmWorkspaces() uses pnpm work
     "packageJsonName": "@demo/solo-trailing-slash",
     "pnpmShrinkwrap": "pnpm-lock.yaml",
   },
+  {
+    "packageFile": "test/test-package/package.json",
+    "packageJsonName": "@demo/test-package",
+    "pnpmShrinkwrap": "pnpm-lock.yaml",
+  },
+  {
+    "packageFile": "tests/test-package2/package.json",
+    "packageJsonName": "@demo/test-package2",
+    "pnpmShrinkwrap": "pnpm-lock.yaml",
+  },
 ]
 `;
diff --git a/lib/modules/manager/npm/extract/pnpm.spec.ts b/lib/modules/manager/npm/extract/pnpm.spec.ts
index f391cd7aaaea3822b79a9907efe360064794177b..8e4ca91a0be0420980c732904d4a0a350d68fc02 100644
--- a/lib/modules/manager/npm/extract/pnpm.spec.ts
+++ b/lib/modules/manager/npm/extract/pnpm.spec.ts
@@ -126,6 +126,16 @@ describe('modules/manager/npm/extract/pnpm', () => {
           packageJsonName: '@demo/solo-trailing-slash',
           pnpmShrinkwrap: undefined as undefined | string,
         },
+        {
+          packageFile: 'test/test-package/package.json',
+          packageJsonName: '@demo/test-package',
+          pnpmShrinkwrap: undefined as undefined | string,
+        },
+        {
+          packageFile: 'tests/test-package2/package.json',
+          packageJsonName: '@demo/test-package2',
+          pnpmShrinkwrap: undefined as undefined | string,
+        },
       ];
 
       await detectPnpmWorkspaces(packageFiles);
diff --git a/lib/modules/manager/npm/extract/pnpm.ts b/lib/modules/manager/npm/extract/pnpm.ts
index 55ede53b6a73faabba571e559e2b10d9c3efa703..b278088137d8118930bb1834877e44e965dca583 100644
--- a/lib/modules/manager/npm/extract/pnpm.ts
+++ b/lib/modules/manager/npm/extract/pnpm.ts
@@ -105,7 +105,11 @@ export async function detectPnpmWorkspaces(
       const { localDir } = GlobalConfig.get();
       const packages = await findPackages(
         upath.dirname(upath.join(localDir, workspaceYamlPath)),
-        { patterns: filters }
+        {
+          patterns: filters,
+          // Match the ignores used in @pnpm/find-workspace-packages
+          ignore: ['**/node_modules/**', '**/bower_components/**'],
+        }
       );
       const packagePaths = packages.map((pkg) =>
         upath.join(pkg.dir, 'package.json')