diff --git a/vendor/magento/module-sitemap/Model/ResourceModel/Catalog/Category.php b/vendor/magento/module-sitemap/Model/ResourceModel/Catalog/Category.php
index 6a8190c2b765..85f8c0c6f4b4 100644
--- a/vendor/magento/module-sitemap/Model/ResourceModel/Catalog/Category.php
+++ b/vendor/magento/module-sitemap/Model/ResourceModel/Catalog/Category.php
@@ -6,6 +6,7 @@
 namespace Magento\Sitemap\Model\ResourceModel\Catalog;
 
 use Magento\CatalogUrlRewrite\Model\CategoryUrlRewriteGenerator;
+use Magento\Framework\App\ObjectManager;
 
 /**
  * Sitemap resource catalog collection model
@@ -45,27 +46,38 @@ class Category extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
      */
     protected $metadataPool;
 
+    /**
+     * @var CategorySelectBuilder
+     */
+    private $categorySelectBuilder;
+
     /**
      * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Catalog\Model\ResourceModel\Category $categoryResource
      * @param \Magento\Framework\EntityManager\MetadataPool $metadataPool
      * @param string $connectionName
+     * @param CategorySelectBuilder|null $categorySelectBuilder
      */
     public function __construct(
         \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Catalog\Model\ResourceModel\Category $categoryResource,
         \Magento\Framework\EntityManager\MetadataPool $metadataPool,
-        $connectionName = null
+        $connectionName = null,
+        CategorySelectBuilder $categorySelectBuilder = null
     ) {
         $this->_storeManager = $storeManager;
         $this->_categoryResource = $categoryResource;
         parent::__construct($context, $connectionName);
         $this->metadataPool = $metadataPool;
+        $this->categorySelectBuilder = $categorySelectBuilder ??
+            ObjectManager::getInstance()->get(CategorySelectBuilder::class);
     }
 
     /**
+     * Initialize catalog category entity resource model
+     *
      * @return void
      */
     protected function _construct()
@@ -104,23 +116,17 @@ public function getCollection($storeId)
             return false;
         }
 
-        $this->_select = $connection->select()->from(
-            ['e' => $this->getMainTable()],
-            [$this->getIdFieldName(), 'updated_at']
-        )->joinLeft(
-            ['url_rewrite' => $this->getTable('url_rewrite')],
-            'e.entity_id = url_rewrite.entity_id AND url_rewrite.is_autogenerated = 1'
-            . $connection->quoteInto(' AND url_rewrite.store_id = ?', $store->getId())
-            . $connection->quoteInto(' AND url_rewrite.entity_type = ?', CategoryUrlRewriteGenerator::ENTITY_TYPE),
-            ['url' => 'request_path']
-        )->where(
-            'e.path LIKE ?',
-            $categoryRow['path'] . '/%'
+        $this->_select = $this->categorySelectBuilder->execute(
+            $this->getMainTable(),
+            $this->getIdFieldName(),
+            $store,
+            $categoryRow['path']
         );
 
         $this->_addFilter($storeId, 'is_active', 1);
 
         $query = $connection->query($this->_select);
+
         while ($row = $query->fetch()) {
             $category = $this->_prepareCategory($row);
             $categories[$category->getId()] = $category;
@@ -186,7 +192,6 @@ protected function _addFilter($storeId, $attributeCode, $value, $type = '=')
                 break;
             default:
                 return false;
-                break;
         }
 
         if ($attribute['backend_type'] == 'static') {
diff --git a/vendor/magento/module-sitemap/Model/ResourceModel/Catalog/CategorySelectBuilder.php b/vendor/magento/module-sitemap/Model/ResourceModel/Catalog/CategorySelectBuilder.php
new file mode 100644
index 000000000000..f35639735d13
--- /dev/null
+++ b/vendor/magento/module-sitemap/Model/ResourceModel/Catalog/CategorySelectBuilder.php
@@ -0,0 +1,67 @@
+<?php
+/**
+ * Copyright 2023 Adobe
+ * All Rights Reserved.
+ *
+ * NOTICE: All information contained herein is, and remains
+ * the property of Adobe and its suppliers, if any. The intellectual
+ * and technical concepts contained herein are proprietary to Adobe
+ * and its suppliers and are protected by all applicable intellectual
+ * property laws, including trade secret and copyright laws.
+ * Dissemination of this information or reproduction of this material
+ * is strictly forbidden unless prior written permission is obtained
+ * from Adobe.
+ */
+declare(strict_types=1);
+
+namespace Magento\Sitemap\Model\ResourceModel\Catalog;
+
+use Magento\CatalogUrlRewrite\Model\CategoryUrlRewriteGenerator;
+use Magento\Framework\App\ResourceConnection;
+use Magento\Framework\DB\Select;
+use Magento\Store\Api\Data\StoreInterface;
+
+class CategorySelectBuilder
+{
+
+    /**
+     * @var ResourceConnection
+     */
+    private $resource;
+
+    /***
+     * @param ResourceConnection $resource
+     */
+    public function __construct(ResourceConnection $resource) {
+        $this->resource = $resource;
+    }
+
+    /**
+     * Allow to modify a select statement with plugins
+     *
+     * @param string $mainTableName
+     * @param string $idField
+     * @param StoreInterface $store
+     * @param string $path
+     * @return Select
+     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
+     */
+    public function execute(string $mainTableName, string $idField, StoreInterface $store, string $path)
+    {
+        $connection = $this->resource->getConnection();
+
+        return $connection->select()->from(
+            ['e' => $mainTableName],
+            [$idField, 'updated_at']
+        )->joinLeft(
+            ['url_rewrite' => $this->resource->getTableName('url_rewrite')],
+            'e.entity_id = url_rewrite.entity_id AND url_rewrite.is_autogenerated = 1'
+            . $connection->quoteInto(' AND url_rewrite.store_id = ?', $store->getId())
+            . $connection->quoteInto(' AND url_rewrite.entity_type = ?', CategoryUrlRewriteGenerator::ENTITY_TYPE),
+            ['url' => 'request_path']
+        )->where(
+            'e.path LIKE ?',
+            $path . '/%'
+        );
+    }
+}
diff --git a/vendor/magento/module-sitemap/Model/ResourceModel/Catalog/Product.php b/vendor/magento/module-sitemap/Model/ResourceModel/Catalog/Product.php
index dc15819b087b..f1771ee79689 100644
--- a/vendor/magento/module-sitemap/Model/ResourceModel/Catalog/Product.php
+++ b/vendor/magento/module-sitemap/Model/ResourceModel/Catalog/Product.php
@@ -5,11 +5,9 @@
  */
 namespace Magento\Sitemap\Model\ResourceModel\Catalog;
 
-use Magento\Catalog\Helper\Product as HelperProduct;
 use Magento\Catalog\Model\Product\Image\UrlBuilder;
 use Magento\CatalogUrlRewrite\Model\ProductUrlRewriteGenerator;
 use Magento\Framework\App\ObjectManager;
-use Magento\Store\Model\ScopeInterface;
 use Magento\Store\Model\Store;
 
 /**
@@ -21,7 +19,7 @@
  */
 class Product extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
-    const NOT_SELECTED_IMAGE = 'no_selection';
+    public const NOT_SELECTED_IMAGE = 'no_selection';
 
     /**
      * Collection Zend Db select
@@ -44,8 +42,6 @@ class Product extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
     protected $mediaGalleryReadHandler;
 
     /**
-     * Sitemap data
-     *
      * @var \Magento\Sitemap\Helper\Data
      */
     protected $_sitemapData = null;
@@ -79,30 +75,19 @@ class Product extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
     /**
      * @var \Magento\Catalog\Model\Product\Media\Config
      * @deprecated 100.2.0 unused
+     * @see getProductImageUrl
      */
     protected $_mediaConfig;
 
-    /**
-     * @var \Magento\Catalog\Model\Product
-     */
-    private $productModel;
-
-    /**
-     * @var \Magento\Catalog\Helper\Image
-     */
-    private $catalogImageHelper;
-
     /**
      * @var UrlBuilder
      */
     private $imageUrlBuilder;
 
     /**
-     * Scope Config
-     *
-     * @var \Magento\Framework\App\Config\ScopeConfigInterface
+     * @var ProductSelectBuilder
      */
-    private $scopeConfig;
+    private $productSelectBuilder;
 
     /**
      * Product constructor.
@@ -121,7 +106,9 @@ class Product extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
      * @param \Magento\Catalog\Helper\Image $catalogImageHelper
      * @param \Magento\Framework\App\Config\ScopeConfigInterface|null $scopeConfig
      * @param UrlBuilder $urlBuilder
+     * @param ProductSelectBuilder $productSelectBuilder
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
+     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
     public function __construct(
         \Magento\Framework\Model\ResourceModel\Db\Context $context,
@@ -137,7 +124,8 @@ public function __construct(
         \Magento\Catalog\Model\Product $productModel = null,
         \Magento\Catalog\Helper\Image $catalogImageHelper = null,
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig = null,
-        UrlBuilder $urlBuilder = null
+        UrlBuilder $urlBuilder = null,
+        ProductSelectBuilder $productSelectBuilder = null
     ) {
         $this->_productResource = $productResource;
         $this->_storeManager = $storeManager;
@@ -147,13 +135,9 @@ public function __construct(
         $this->mediaGalleryReadHandler = $mediaGalleryReadHandler;
         $this->_mediaConfig = $mediaConfig;
         $this->_sitemapData = $sitemapData;
-        $this->productModel = $productModel ?: ObjectManager::getInstance()->get(\Magento\Catalog\Model\Product::class);
-        $this->catalogImageHelper = $catalogImageHelper;
         $this->imageUrlBuilder = $urlBuilder ?? ObjectManager::getInstance()->get(UrlBuilder::class);
-        $this->catalogImageHelper = $catalogImageHelper ?: ObjectManager::getInstance()
-            ->get(\Magento\Catalog\Helper\Image::class);
-        $this->scopeConfig = $scopeConfig ?: ObjectManager::getInstance()
-            ->get(\Magento\Framework\App\Config\ScopeConfigInterface::class);
+        $this->productSelectBuilder = $productSelectBuilder ??
+            ObjectManager::getInstance()->get(ProductSelectBuilder::class);
 
         parent::__construct($context, $connectionName);
     }
@@ -311,28 +295,12 @@ public function getCollection($storeId)
         }
 
         $connection = $this->getConnection();
-        $urlRewriteMetaDataCondition = '';
-        if (!$this->isCategoryProductURLsConfig($storeId)) {
-            $urlRewriteMetaDataCondition = ' AND url_rewrite.metadata IS NULL';
-        }
 
-        $this->_select = $connection->select()->from(
-            ['e' => $this->getMainTable()],
-            [$this->getIdFieldName(), $this->_productResource->getLinkField(), 'updated_at']
-        )->joinInner(
-            ['w' => $this->getTable('catalog_product_website')],
-            'e.entity_id = w.product_id',
-            []
-        )->joinLeft(
-            ['url_rewrite' => $this->getTable('url_rewrite')],
-            'e.entity_id = url_rewrite.entity_id AND url_rewrite.is_autogenerated = 1'
-            . $urlRewriteMetaDataCondition
-            . $connection->quoteInto(' AND url_rewrite.store_id = ?', $store->getId())
-            . $connection->quoteInto(' AND url_rewrite.entity_type = ?', ProductUrlRewriteGenerator::ENTITY_TYPE),
-            ['url' => 'request_path']
-        )->where(
-            'w.website_id = ?',
-            $store->getWebsiteId()
+        $this->_select = $this->productSelectBuilder->execute(
+            $this->getMainTable(),
+            $this->getIdFieldName(),
+            $this->_productResource->getLinkField(),
+            $store
         );
 
         $this->_addFilter($store->getId(), 'visibility', $this->_productVisibility->getVisibleInSiteIds(), 'in');
@@ -491,20 +459,4 @@ private function getProductImageUrl($image)
     {
         return $this->imageUrlBuilder->getUrl($image, 'product_page_image_large');
     }
-
-    /**
-     * Return Use Categories Path for Product URLs config value
-     *
-     * @param null|string $storeId
-     *
-     * @return bool
-     */
-    private function isCategoryProductURLsConfig($storeId)
-    {
-        return $this->scopeConfig->isSetFlag(
-            HelperProduct::XML_PATH_PRODUCT_URL_USE_CATEGORY,
-            ScopeInterface::SCOPE_STORE,
-            $storeId
-        );
-    }
 }
diff --git a/vendor/magento/module-sitemap/Model/ResourceModel/Catalog/ProductSelectBuilder.php b/vendor/magento/module-sitemap/Model/ResourceModel/Catalog/ProductSelectBuilder.php
new file mode 100644
index 000000000000..a95ba1e59be5
--- /dev/null
+++ b/vendor/magento/module-sitemap/Model/ResourceModel/Catalog/ProductSelectBuilder.php
@@ -0,0 +1,76 @@
+<?php
+/**
+ * Copyright 2023 Adobe
+ * All Rights Reserved.
+ *
+ * NOTICE: All information contained herein is, and remains
+ * the property of Adobe and its suppliers, if any. The intellectual
+ * and technical concepts contained herein are proprietary to Adobe
+ * and its suppliers and are protected by all applicable intellectual
+ * property laws, including trade secret and copyright laws.
+ * Dissemination of this information or reproduction of this material
+ * is strictly forbidden unless prior written permission is obtained
+ * from Adobe.
+ */
+declare(strict_types=1);
+
+namespace Magento\Sitemap\Model\ResourceModel\Catalog;
+
+use Magento\CatalogUrlRewrite\Model\CategoryUrlRewriteGenerator;
+use Magento\CatalogUrlRewrite\Model\ProductUrlRewriteGenerator;
+use Magento\Framework\App\ResourceConnection;
+use Magento\Framework\DB\Select;
+use Magento\Store\Api\Data\StoreInterface;
+
+class ProductSelectBuilder
+{
+
+    /**
+     * @var ResourceConnection
+     */
+    private $resource;
+
+    /***
+     * @param ResourceConnection $resource
+     */
+    public function __construct(ResourceConnection $resource) {
+        $this->resource = $resource;
+    }
+
+    /**
+     * Allow to modify a select statement with plugins
+     *
+     * @param string $mainTableName
+     * @param string $idField
+     * @param string $linkField
+     * @param StoreInterface $store
+     * @return Select
+     */
+    public function execute(
+        string $mainTableName,
+        string $idField,
+        string $linkField,
+        StoreInterface $store
+    ): Select {
+        $connection = $this->resource->getConnection();
+
+        return $connection->select()->from(
+            ['e' => $mainTableName],
+            [$idField, $linkField, 'updated_at']
+        )->joinInner(
+            ['w' => $this->resource->getTableName('catalog_product_website')],
+            'e.entity_id = w.product_id',
+            []
+        )->joinLeft(
+            ['url_rewrite' => $this->resource->getTableName('url_rewrite')],
+            'e.entity_id = url_rewrite.entity_id AND url_rewrite.is_autogenerated = 1'
+            . ' AND url_rewrite.metadata IS NULL'
+            . $connection->quoteInto(' AND url_rewrite.store_id = ?', $store->getId())
+            . $connection->quoteInto(' AND url_rewrite.entity_type = ?', ProductUrlRewriteGenerator::ENTITY_TYPE),
+            ['url' => 'request_path']
+        )->where(
+            'w.website_id = ?',
+            $store->getWebsiteId()
+        );
+    }
+}
diff --git a/vendor/magento/module-url-rewrite/etc/db_schema.xml b/vendor/magento/module-url-rewrite/etc/db_schema.xml
index 2812efac0bfb..696e721e8efa 100644
--- a/vendor/magento/module-url-rewrite/etc/db_schema.xml
+++ b/vendor/magento/module-url-rewrite/etc/db_schema.xml
@@ -40,5 +40,9 @@
         <index referenceId="URL_REWRITE_ENTITY_ID" indexType="btree">
             <column name="entity_id"/>
         </index>
+        <index referenceId="URL_REWRITE_IS_AUTOGENERATED_METADATA" indexType="btree">
+            <column name="is_autogenerated"/>
+            <column name="metadata"/>
+        </index>
     </table>
 </schema>
diff --git a/vendor/magento/module-url-rewrite/etc/db_schema_whitelist.json b/vendor/magento/module-url-rewrite/etc/db_schema_whitelist.json
index 658673959a73..92e34fed6c96 100644
--- a/vendor/magento/module-url-rewrite/etc/db_schema_whitelist.json
+++ b/vendor/magento/module-url-rewrite/etc/db_schema_whitelist.json
@@ -15,7 +15,8 @@
         "index": {
             "URL_REWRITE_TARGET_PATH": true,
             "URL_REWRITE_STORE_ID_ENTITY_ID": true,
-            "URL_REWRITE_ENTITY_ID": true
+            "URL_REWRITE_ENTITY_ID": true,
+            "URL_REWRITE_IS_AUTOGENERATED_METADATA": true
         },
         "constraint": {
             "PRIMARY": true,
