diff --git a/core/modules/hal/src/Normalizer/EntityReferenceItemNormalizer.php b/core/modules/hal/src/Normalizer/EntityReferenceItemNormalizer.php
index 0790888b19..ebab51ff77 100644
--- a/core/modules/hal/src/Normalizer/EntityReferenceItemNormalizer.php
+++ b/core/modules/hal/src/Normalizer/EntityReferenceItemNormalizer.php
@@ -80,8 +80,15 @@ public function normalize($field_item, $format = NULL, array $context = []) {
     unset($context['langcode']);
     $context['included_fields'] = ['uuid'];
 
-    // Normalize the target entity.
-    $embedded = $this->serializer->normalize($target_entity, $format, $context);
+    // Normalize the target entity unless it recurses onto itself.
+    if ($target_entity &&
+      $field_item->getEntity()->getEntityType() == $target_entity->getEntityType() &&
+      $field_item->getEntity()->id() == $target_entity->id()) {
+      return parent::normalize($field_item, $format, $context);
+    }
+    else {
+      $embedded = $this->serializer->normalize($target_entity, $format, $context);
+    }
     // @todo https://www.drupal.org/project/drupal/issues/3110815 $embedded will
     //   be NULL if the target entity does not exist. Use null coalescence
     //   operator to preserve behavior in PHP 7.4.
diff --git a/core/modules/hal/tests/src/Kernel/NormalizeTest.php b/core/modules/hal/tests/src/Kernel/NormalizeTest.php
index 6a756d9bc9..cb36467b31 100644
--- a/core/modules/hal/tests/src/Kernel/NormalizeTest.php
+++ b/core/modules/hal/tests/src/Kernel/NormalizeTest.php
@@ -4,7 +4,9 @@
 
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Url;
+use Drupal\Tests\field\Traits\EntityReferenceTestTrait;
 use Drupal\entity_test\Entity\EntityTest;
+use Drupal\entity_test\Entity\EntityTestMul;
 use Drupal\filter\Entity\FilterFormat;
 
 /**
@@ -15,12 +17,18 @@
  */
 class NormalizeTest extends NormalizerTestBase {
 
+  use EntityReferenceTestTrait;
+
   /**
    * {@inheritdoc}
    */
   protected function setUp(): void {
     parent::setUp();
 
+    // Create recursive reference field.
+    $this->installEntitySchema('entity_test_mul');
+    $this->createEntityReferenceField('entity_test_mul', 'entity_test_mul', 'field_recursive_ref', 'field_recursive_ref', 'entity_test_mul');
+
     FilterFormat::create([
       'format' => 'my_text_format',
       'name' => 'My Text Format',
@@ -190,6 +198,52 @@ public function testNormalize() {
     $this->assertEquals($expected_array['_links'][$relation_uri], $normalized['_links'][$relation_uri], 'Links are added for entity reference field.');
   }
 
+  /**
+   * Tests recursive entity references in _embedded.
+   */
+  public function testRecursiveEntityReference() {
+    $recursing_entity = EntityTestMul::create([
+      'name' => $this->randomMachineName(),
+      'field_recursive_ref' => NULL,
+    ]);
+    $recursing_entity->save();
+
+    $recursing_entity->field_recursive_ref->target_id = $recursing_entity->id();
+    $recursing_entity->save();
+
+    $type_uri = Url::fromUri('base:rest/type/entity_test_mul/entity_test_mul', ['absolute' => TRUE])->toString();
+    $user_uri = Url::fromUri('base:rest/relation/entity_test_mul/entity_test_mul/user_id', ['absolute' => TRUE])->toString();
+
+    $expected_array = [
+      '_links' => [
+        'self' => [
+          'href' => $this->getEntityUri($recursing_entity),
+        ],
+        'type' => [
+          'href' => $type_uri,
+        ],
+        $user_uri => [
+          [
+            'lang' => 'en',
+          ],
+        ],
+        // Entity reference relation should not be present here.
+      ],
+      '_embedded' => [
+        $user_uri => [
+          [
+            'lang' => 'en',
+          ]
+        ],
+        // Entity reference relation should not be present here.
+      ],
+    ];
+
+    $normalized = $this->serializer->normalize($recursing_entity, $this->format);
+    $this->assertEquals($expected_array['_links'], $normalized['_links'], 'Links are not added for recursive entity reference field.');
+    $this->assertEquals($expected_array['_embedded'], $normalized['_embedded'], 'Recursive entity reference field is not in _embedded.');
+  }
+
   /**
    * Constructs the entity URI.
    *
