diff --git a/vendor/magento/module-page-cache/Model/App/Request/Http/Identifier.php b/vendor/magento/module-page-cache/Model/App/Request/Http/Identifier.php
new file mode 100644
index 0000000000000..9cd3965e201af
--- /dev/null
+++ b/vendor/magento/module-page-cache/Model/App/Request/Http/Identifier.php
@@ -0,0 +1,61 @@
+<?php
+declare(strict_types=1);
+
+namespace Magento\PageCache\Model\App\Request\Http;
+
+use Magento\Framework\App\ObjectManager;
+use Magento\Framework\App\PageCache\IdentifierInterface;
+use Magento\Framework\Serialize\Serializer\Json;
+
+class Identifier implements IdentifierInterface
+{
+    /**
+     * @var \Magento\Framework\App\Request\Http
+     */
+    protected $request;
+
+    /**
+     * @var \Magento\Framework\App\Http\Context
+     */
+    protected $context;
+
+    /**
+     * @var Json
+     */
+    private $serializer;
+
+    /**
+     * @param \Magento\Framework\App\Request\Http $request
+     * @param \Magento\Framework\App\Http\Context $context
+     * @param Json|null $serializer
+     */
+    public function __construct(
+        \Magento\Framework\App\Request\Http $request,
+        \Magento\Framework\App\Http\Context $context,
+        Json $serializer = null,
+        private IdentifierStoreReader $identifierStoreReader
+    ) {
+        $this->request = $request;
+        $this->context = $context;
+        $this->serializer = $serializer ?: ObjectManager::getInstance()->get(Json::class);
+    }
+
+    /**
+     * Return unique page identifier
+     *
+     * @return string
+     */
+    public function getValue()
+    {
+        $data = [
+            $this->request->isSecure(),
+            $this->request->getUriString(),
+            $this->request->get(\Magento\Framework\App\Response\Http::COOKIE_VARY_STRING)
+                ?: $this->context->getVaryString()
+        ];
+
+        $data = $this->identifierStoreReader->getPageTagsWithStoreCacheTags($data);
+
+        return sha1($this->serializer->serialize($data));
+    }
+}
diff --git a/vendor/magento/module-page-cache/Model/App/Request/Http/IdentifierForSave.php b/vendor/magento/module-page-cache/Model/App/Request/Http/IdentifierForSave.php
index 26b8715c36447..aa31238ecf792 100644
--- a/vendor/magento/module-page-cache/Model/App/Request/Http/IdentifierForSave.php
+++ b/vendor/magento/module-page-cache/Model/App/Request/Http/IdentifierForSave.php
@@ -23,9 +23,10 @@ class IdentifierForSave implements IdentifierInterface
      * @param Json $serializer
      */
     public function __construct(
-        private Http $request,
-        private Context $context,
-        private Json $serializer
+        private Http                  $request,
+        private Context               $context,
+        private Json                  $serializer,
+        private IdentifierStoreReader $identifierStoreReader,
     ) {
     }
 
@@ -42,6 +43,8 @@ public function getValue()
             $this->context->getVaryString()
         ];
 
+        $data = $this->identifierStoreReader->getPageTagsWithStoreCacheTags($data);
+
         return sha1($this->serializer->serialize($data));
     }
 }
diff --git a/vendor/magento/module-page-cache/Model/App/Request/Http/IdentifierStoreReader.php b/vendor/magento/module-page-cache/Model/App/Request/Http/IdentifierStoreReader.php
new file mode 100644
index 0000000000000..b92ce6555d04d
--- /dev/null
+++ b/vendor/magento/module-page-cache/Model/App/Request/Http/IdentifierStoreReader.php
@@ -0,0 +1,67 @@
+<?php
+declare(strict_types=1);
+
+namespace Magento\PageCache\Model\App\Request\Http;
+
+use Magento\Store\Model\StoreManager;
+
+class IdentifierStoreReader
+{
+    /**
+     * @var \Magento\Framework\View\DesignExceptions
+     */
+    private $designExceptions;
+
+    /**
+     * @var \Magento\Framework\App\RequestInterface
+     */
+    private $request;
+
+    /**
+     * @var \Magento\PageCache\Model\Config
+     */
+    private $config;
+
+    /**
+     * @param \Magento\Framework\View\DesignExceptions $designExceptions
+     * @param \Magento\Framework\App\RequestInterface $request
+     * @param \Magento\PageCache\Model\Config $config
+     */
+    public function __construct(
+        \Magento\Framework\View\DesignExceptions $designExceptions,
+        \Magento\Framework\App\RequestInterface $request,
+        \Magento\PageCache\Model\Config $config
+    ) {
+        $this->designExceptions = $designExceptions;
+        $this->request = $request;
+        $this->config = $config;
+    }
+
+    /**
+     * Adds a theme key to identifier for a built-in cache if user-agent theme rule is actual
+     *
+     * @param \Magento\Framework\App\PageCache\Identifier $identifier
+     * @param string $result
+     * @return array
+     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
+     */
+    public function getPageTagsWithStoreCacheTags($data): ?array
+    {
+        if ($this->config->getType() === \Magento\PageCache\Model\Config::BUILT_IN && $this->config->isEnabled()) {
+            $ruleDesignException = $this->designExceptions->getThemeByRequest($this->request);
+            if ($ruleDesignException !== false) {
+                $data['DESIGN'] = $ruleDesignException;
+            }
+
+            if ($runType = $this->request->getServerValue(StoreManager::PARAM_RUN_TYPE)) {
+                $data[StoreManager::PARAM_RUN_TYPE] = $runType;
+            }
+
+            if ($runCode = $this->request->getServerValue(StoreManager::PARAM_RUN_CODE)) {
+                $data[StoreManager::PARAM_RUN_CODE] = $runCode;
+            }
+        }
+
+        return $data;
+    }
+}
diff --git a/vendor/magento/module-page-cache/etc/di.xml b/vendor/magento/module-page-cache/etc/di.xml
index acaee4b373b0f..038ddfec14caf 100644
--- a/vendor/magento/module-page-cache/etc/di.xml
+++ b/vendor/magento/module-page-cache/etc/di.xml
@@ -6,10 +6,6 @@
  */
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
-    <type name="Magento\Framework\App\PageCache\Identifier">
-        <plugin name="core-app-area-design-exception-plugin"
-                type="Magento\PageCache\Model\App\CacheIdentifierPlugin" sortOrder="10"/>
-    </type>
     <type name="Magento\Framework\App\PageCache\Cache">
         <plugin name="fpc-type-plugin" type="Magento\PageCache\Model\App\PageCachePlugin"/>
     </type>
@@ -48,4 +44,6 @@
     <preference for="Magento\PageCache\Model\VclGeneratorInterface" type="Magento\PageCache\Model\Varnish\VclGenerator"/>
     <preference for="Magento\PageCache\Model\VclTemplateLocatorInterface" type="Magento\PageCache\Model\Varnish\VclTemplateLocator"/>
     <preference for="Magento\PageCache\Model\Spi\PageCacheTagsPreprocessorInterface" type="Magento\PageCache\Model\PageCacheTagsPreprocessorComposite"/>
+
+    <preference for="Magento\Framework\App\PageCache\IdentifierInterface" type="Magento\PageCache\Model\App\Request\Http\Identifier"/>
 </config>
diff --git a/vendor/magento/module-page-cache/etc/frontend/di.xml b/vendor/magento/module-page-cache/etc/frontend/di.xml
index 7f4d05ae206bf..4ef3be3ae8ec9 100644
--- a/vendor/magento/module-page-cache/etc/frontend/di.xml
+++ b/vendor/magento/module-page-cache/etc/frontend/di.xml
@@ -31,4 +31,15 @@
             <argument name="identifierForSave" xsi:type="object">Magento\PageCache\Model\App\Request\Http\IdentifierForSave</argument>
         </arguments>
     </type>
+
+    <type name="Magento\PageCache\Model\App\Request\Http\IdentifierForSave">
+        <arguments>
+            <argument name="identifierStoreReader" xsi:type="object">Magento\PageCache\Model\App\Request\Http\IdentifierStoreReader</argument>
+        </arguments>
+    </type>
+    <type name="Magento\Framework\App\PageCache\Identifier">
+        <arguments>
+            <argument name="identifierStoreReader" xsi:type="object">Magento\PageCache\Model\App\Request\Http\IdentifierStoreReader</argument>
+        </arguments>
+    </type>
 </config>
