diff --git a/vendor/magento/module-target-rule/Block/Product/AbstractProduct.php b/vendor/magento/module-target-rule/Block/Product/AbstractProduct.php
index 594b90a2033..ff66ec9b4f3 100644
--- a/vendor/magento/module-target-rule/Block/Product/AbstractProduct.php
+++ b/vendor/magento/module-target-rule/Block/Product/AbstractProduct.php
@@ -14,8 +14,6 @@ use Magento\TargetRule\Model\Source\Rotation;
 abstract class AbstractProduct extends \Magento\Catalog\Block\Product\AbstractProduct
 {
     /**
-     * Link collection
-     *
      * @var null|\Magento\Catalog\Model\ResourceModel\Product\Collection
      */
     protected $_linkCollection = null;
@@ -65,8 +63,6 @@ abstract class AbstractProduct extends \Magento\Catalog\Block\Product\AbstractPr
     abstract public function getPositionBehavior();
 
     /**
-     * Target rule data
-     *
      * @var \Magento\TargetRule\Helper\Data
      */
     protected $_targetRuleData = null;
@@ -175,11 +171,29 @@ abstract class AbstractProduct extends \Magento\Catalog\Block\Product\AbstractPr
             }
         }
         if ($this->isShuffled()) {
-            shuffle($items);
+            $items = $this->shuffle($items);
         }
         return $items;
     }
 
+    /**
+     * Shuffle items preserving the key as item id
+     *
+     * @param array $items
+     * @return array
+     */
+    private function shuffle(array $items): array
+    {
+        $ids = array_keys($items);
+        shuffle($ids);
+        $result = [];
+        foreach ($ids as $id) {
+            $result[$id] = $items[$id];
+        }
+
+        return $result;
+    }
+
     /**
      * Whether rotation mode is set to "weighted random" or "random"
      *
