Big Sitemap in OpenCart 3x
If you have many pages of the product on the OpenCart, then the standard module of google sitmap may not handle the information, so below will be given the code for the partition of the site into several parts of 500 references.
We go to file catalog/controller/extension/feed/google_sitemap.php and change its image to the next code
<?php class ControllerExtensionFeedGoogleSitemap extends Controller { public function index() { if ($this->config->get('feed_google_sitemap_status')) { if(isset($_GET['manufacturers']) && $_GET['manufacturers']=='active'){ $output = $this->getManufactureresSiteMaps(); }elseif (isset($_GET['start'])) { $output = $this->getProductsSiteMaps($_GET['start'], $_GET['end']); }else{ $output ='<?xml version="1.0" encoding="UTF-8"?><sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'; $this->load->model('catalog/product'); $totalProducts = $this->model_catalog_product->getTotalProducts(); for($i=0; $i<$totalProducts; $i=$i+500 ){ $output .= '<sitemap><loc>'.HTTPS_SERVER.'index.php?route=extension/feed/google_sitemap&start=' . $i . '&end=500</loc><lastmod>2023-02-19T18:23:17+00:00</lastmod></sitemap>'; } $output .= '<sitemap><loc>'.HTTPS_SERVER.'index.php?route=extension/feed/google_sitemap&manufacturers=active</loc><lastmod>2023-02-19T18:23:17+00:00</lastmod></sitemap>'; $output.='</sitemapindex>'; } $this->response->addHeader('Content-Type: application/xml'); $this->response->setOutput($output); } } protected function getCategories($parent_id, $current_path = '') { $output = ''; $results = $this->model_catalog_category->getCategories($parent_id); foreach ($results as $result) { if (!$current_path) { $new_path = $result['category_id']; } else { $new_path = $current_path . '_' . $result['category_id']; } $output .= '<url>'; $output .= ' <loc>' . $this->url->link('product/category', 'path=' . $new_path) . '</loc>'; $output .= ' <changefreq>daily</changefreq>'; $output .= ' <priority>0.7</priority>'; $output .= '</url>'; // $this->load->model('catalog/product'); // $products = $this->model_catalog_product->getProducts(array('filter_category_id' => $result['category_id'])); // foreach ($products as $product) { // $output .= '<url>'; // $output .= ' <loc>' . $this->url->link('product/product', 'path=' . $new_path . '&product_id=' . $product['product_id']) . '</loc>'; // $output .= ' <changefreq>daily</changefreq>'; // $output .= ' <priority>1.0</priority>'; // $output .= '</url>'; // } $output .= $this->getCategories($result['category_id'], $new_path); } return $output; } protected function getProductsSiteMaps ($start, $end) { $output = '<?xml version="1.0" encoding="UTF-8"?>'; $output .= '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1">'; $this->load->model('catalog/product'); $this->load->model('tool/image'); $filter_data = array( 'start' => $start, 'limit' => 500, ); $products = $this->model_catalog_product->getProducts($filter_data); foreach ($products as $product) { if ($product['image']) { $output .= '<url>'; $output .= ' <loc>' . $this->url->link('product/product', 'product_id=' . $product['product_id']) . '</loc>'; $output .= ' <changefreq>daily</changefreq>'; $output .= ' <lastmod>' . date('Y-m-d\TH:i:sP', strtotime($product['date_modified'])) . '</lastmod>'; $output .= ' <priority>1.0</priority>'; $output .= ' <image:image>'; $output .= ' <image:loc>' . $this->model_tool_image->resize($product['image'], $this->config->get('theme_' . $this->config->get('config_theme') . '_image_popup_width'), $this->config->get('theme_' . $this->config->get('config_theme') . '_image_popup_height')) . '</image:loc>'; $output .= ' <image:caption>' . (str_replace('&', 'and', $product['name'])) . '</image:caption>'; $output .= ' <image:title>' . (str_replace('&', 'and', $product['name'])) . '</image:title>'; $output .= ' </image:image>'; $output .= '</url>'; } } $output .= '</urlset>'; return $output; } protected function getManufactureresSiteMaps(){ $output = '<?xml version="1.0" encoding="UTF-8"?>'; $output .= '<urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd http://www.google.com/schemas/sitemap-image/1.1 http://www.google.com/schemas/sitemap-image/1.1/sitemap-image.xsd" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'; $this->load->model('catalog/category'); $output .= $this->getCategories(0); $this->load->model('catalog/manufacturer'); $manufacturers = $this->model_catalog_manufacturer->getManufacturers(); foreach ($manufacturers as $manufacturer) { $output .= '<url>'; $output .= ' <loc>' . $this->url->link('product/manufacturer/info', 'manufacturer_id=' . $manufacturer['manufacturer_id']) . '</loc>'; $output .= ' <changefreq>daily</changefreq>'; $output .= ' <priority>0.7</priority>'; $output .= '</url>'; //$products = $this->model_catalog_product->getProducts(array('filter_manufacturer_id' => $manufacturer['manufacturer_id'])); // foreach ($products as $product) { // $output .= '<url>'; // $output .= ' <loc>' . $this->url->link('product/product', 'manufacturer_id=' . $manufacturer['manufacturer_id'] . '&product_id=' . $product['product_id']) . '</loc>'; // $output .= ' <changefreq>daily</changefreq>'; // $output .= ' <priority>1.0</priority>'; // $output .= '</url>'; // } } $this->load->model('catalog/information'); $informations = $this->model_catalog_information->getInformations(); foreach ($informations as $information) { $output .= '<url>'; $output .= ' <loc>' . $this->url->link('information/information', 'information_id=' . $information['information_id']) . '</loc>'; $output .= ' <changefreq>daily</changefreq>'; $output .= ' <priority>0.5</priority>'; $output .= '</url>'; } $output .= '</urlset>'; return $output; } }