diff --git a/lib/modules/manager/terraform/lockfile/index.spec.ts b/lib/modules/manager/terraform/lockfile/index.spec.ts
index 7557011905d8e0d4ee212131146ade7d41694f28..c6df3ccf13cb6552b055fe08f4feeddc5abaa077 100644
--- a/lib/modules/manager/terraform/lockfile/index.spec.ts
+++ b/lib/modules/manager/terraform/lockfile/index.spec.ts
@@ -76,7 +76,7 @@ describe('modules/manager/terraform/lockfile/index', () => {
 
   it('update single dependency with exact constraint and depType provider', async () => {
     fs.readLocalFile.mockResolvedValueOnce(codeBlock`
-      provider "registry.terraform.io/hashicorp/aws" {
+      provider "registry.opentofu.org/hashicorp/aws" {
         version     = "3.0.0"
         constraints = "3.0.0"
         hashes = [
@@ -111,7 +111,7 @@ describe('modules/manager/terraform/lockfile/index', () => {
       {
         file: {
           contents: codeBlock`
-            provider "registry.terraform.io/hashicorp/aws" {
+            provider "registry.opentofu.org/hashicorp/aws" {
               version     = "3.36.0"
               constraints = "3.36.0"
               hashes = [
@@ -126,7 +126,7 @@ describe('modules/manager/terraform/lockfile/index', () => {
       },
     ]);
     expect(mockHash.mock.calls).toEqual([
-      ['https://registry.terraform.io', 'hashicorp/aws', '3.36.0'],
+      ['https://registry.opentofu.org', 'hashicorp/aws', '3.36.0'],
     ]);
   });
 
diff --git a/lib/modules/manager/terraform/lockfile/index.ts b/lib/modules/manager/terraform/lockfile/index.ts
index aca7419f3d78df18cf5d8f847ecff77a976b9a05..c88cb5c7e1e934722a55331e61b341c6943f92b9 100644
--- a/lib/modules/manager/terraform/lockfile/index.ts
+++ b/lib/modules/manager/terraform/lockfile/index.ts
@@ -3,7 +3,6 @@ import { logger } from '../../../../logger';
 import * as p from '../../../../util/promises';
 import { escapeRegExp, regEx } from '../../../../util/regex';
 import { GetPkgReleasesConfig, getPkgReleases } from '../../../datasource';
-import { TerraformProviderDatasource } from '../../../datasource/terraform-provider';
 import { get as getVersioning } from '../../../versioning';
 import type {
   UpdateArtifact,
@@ -167,9 +166,6 @@ export async function updateArtifacts({
         massageProviderLookupName(dep);
         const { registryUrls, newVersion, packageName } = dep;
 
-        const registryUrl = registryUrls
-          ? registryUrls[0]
-          : TerraformProviderDatasource.defaultRegistryUrls[0];
         const updateLock = locks.find(
           (value) => value.packageName === packageName,
         );
@@ -191,6 +187,10 @@ export async function updateArtifacts({
             continue;
           }
         }
+
+        // use registryURL defined in the update and fall back to the one defined in the lockfile
+        const registryUrl = registryUrls?.[0] ?? updateLock.registryUrl;
+
         const newConstraint = getNewConstraint(dep, updateLock.constraints);
         const update: ProviderLockUpdate = {
           // TODO #22198
diff --git a/lib/modules/manager/terraform/readme.md b/lib/modules/manager/terraform/readme.md
index bb3c4e7e8e422924f164ce7602c9daad6a950d41..ebf59f69447b68600fd5add2117e4dec99f080ed 100644
--- a/lib/modules/manager/terraform/readme.md
+++ b/lib/modules/manager/terraform/readme.md
@@ -1,3 +1,20 @@
+### Terraform vs OpenTofu
+
+There is no way for Renovate to differentiate, if a user is a Terraform user or has already adopted OpenTofu.
+Therefore, Renovate defaults currently to interpret providers without a registry definition to be located at `registry.terraform.io`.
+This behaviour can be modified using `packageRules`:
+
+```json title="Prefer releases from OpenTofu"
+{
+  "packageRules": [
+    {
+      "matchDatasources": ["terraform-provider"],
+      "registryUrl": "https://registry.opentofu.org"
+    }
+  ]
+}
+```
+
 ### Supported dependencies
 
 Renovate supports updating the Terraform dependencies listed below.