10

How we create the sitemap page in Magento 2 like same we have in Magento 1?

http://example.com/catalog/seo_sitemap/
3

5 Answers 5

6

Magento 2: By default not providing HTML Sitemap.

Can use Free Extension:

https://www.mageplaza.com/magento-2-seo-extension/

You have following options

CMS Pages: Can refer Magento 1 Article https://stackoverflow.com/questions/5020257/creating-a-magento-sitemap-page Then Convert it to Magento 2 will gonna Some What Helpfull for CMS Pages

For Categories & Sub Categories: Getting all available category, subcategory list in magento 2

For Categories Product's: Magento 2: get product collection using category id

4
10

As of Magento version 2.1.8, the sitemap functionality is included in the admin by default.

  • Define sitemap location: Marketing > SEO & Search > Site Map. You can also manually generate the sitemap file from here.

  • Configure cron settings: Stores> Configuration > Catalog > XML Sitemap

Here are instructions for setting up recurring cron jobs. Just like Magento 1.x, the system's cron calls the Magento cron script, which schedules jobs.

1
  • 1
    This should be the correct one, installing third party mods should be a last resort for something already built in. Thanks guys!
    – ajankuv
    Commented Mar 6, 2018 at 14:31
6

Magento 2 doesn't have html sitemap url for category and products like in magento 1.xx . For this, you can create a CMS page like 'sitemap/' and call a phtml file

which will include the custom code to call all category

In cms page, call this:

{{block class="Magento\Framework\View\Element\Template" template="Magento_Theme::sitemap.phtml" name="customsitemap"}}

then in phtml, call this:

<?php 
$objectManagerr = \Magento\Framework\App\ObjectManager::getInstance();
$categoryFactory = $objectManagerr->create('Magento\Catalog\Model\ResourceModel\Category\CollectionFactory');
$categoryy = $categoryFactory->create()   
        ->addAttributeToSelect('*');
//->addAttributeToFilter('is_active',1)
//->addAttributeToFilter('is_anchor',1);
$excludedCategory = array(0);

?>

<ul class="sitelist">
<?php foreach ($categoryy as $cc): ?>
    <?php if(!in_array($cc->getId(), $excludedCategory)):?>
        <div class = "sitemap-list" style="float:left;">
        <?php if ($cc->getLevel()==2):?>
            <li>
                <h3><a href="<?php echo $cc->getUrl(); ?>"><?php echo $cc->getName(); ?></a></h3>
                <?php
                    if($cc->getChildren())
                    {
                        $sub = explode(",", $cc->getChildren());
                        $categoryFactorysub = $objectManagerr->create('Magento\Catalog\Model\ResourceModel\Category\CollectionFactory');
                        $categoryysub = $categoryFactorysub->create()   
                        ->addAttributeToSelect('*');
                        $subcat=$categoryysub->addFieldToFilter('entity_id', array('in' =>$sub));

                        //$subcat->printlogquery(true);exit;
                        ?>
                            <ul style="margin-left:15px;"> 
                        <?php foreach ($subcat as $subcategories){ ?>
                            <?php if ($subcategories->getLevel()==3):?>
                                <div class = "sitemap-list">
                                    <li>
                                        <?php if($subcategories->getImageUrl()): ?>
                                        <div class="mega-menu-ad">
                                            <img src="<?php echo ($subcategories->getImageUrl()); ?>" width="25" height="25" />
                                        </div>
                                        <?php endif; ?>

                                        <a href="<?php echo $subcategories->getUrl(); ?>"><?php echo $subcategories->getName(); ?></a>
                                        <?php
                                            if($subcategories->getChildren())
                                            {
                                                $subSubCat = explode(",", $subcategories->getChildren());
                                                $subsubCatFactory = $objectManagerr->create('Magento\Catalog\Model\ResourceModel\Category\CollectionFactory');
                                                $subSubCatCollection = $subsubCatFactory->create()
                                                ->addAttributeToSelect('*');
                                                $subSubCollection=$subSubCatCollection->addFieldToFilter('entity_id', array('in' =>$subSubCat));
                                                ?>
                                                    <ul style="margin-left:20px;">
                                                <?php foreach ($subSubCollection as $subSubcategories){ ?>
                                                        <div class = "sitemap-list">
                                                            <li>
                                                                <?php if($subSubcategories->getImageUrl()): ?>
                                                                <div class="mega-menu-ad">
                                                                    <img src="<?php echo ($subSubcategories->getImageUrl()); ?>" width="25" height="25" />
                                                                </div>
                                                                <?php endif; ?>
                                                                <a href="<?php echo $subSubcategories->getUrl(); ?>"><?php echo $subSubcategories->getName()?></a>
                                                            </li>
                                                        </div>
                                                <?php } ?> 
                                                    </ul>
                                        <?php   } ?>

                                    </li>
                                </div>
                            <?php endif;?>
                        <?php } ?>
                            </ul>
                <?php   } ?>

            </li>
        <?php endif;?>
        </div>
    <?php endif;?>
    <?php endforeach; ?>
    </ul>

This way you can easily create a sitemap URL in the Magento 2.

1
  • Hi, i want to create my own html sitemap can you please help me.. how to use this code. @Riddhish Bhayani
    – Ask Xah
    Commented Jan 27, 2019 at 7:51
2

You can develop your module which will extend the default Magento module module-sitemap.

You can based on the Sitemap model with the \Magento\Sitemap\Model\Sitemap::generateXml and _initSitemapItems methods.

2 approaches :

  1. Create a new FO controller and manage the display with template/layout etc.

  2. Generate a static file in HTML which will be served by Webserver to a custom URL.

It will not be very difficult.

Thanks,

0

Free Magento 2 Dynamic HTML Sitemap extension :

https://bsscommerce.com/magento-2-dynamic-html-sitemap-extension.html

Easy to install and dynamic page with no time, Follow the link above and download.

You can easily customize an URL key for the sitemap and sitemap page.

All the featured are on the plugin website ;

Happy Coding

Not the answer you're looking for? Browse other questions tagged or ask your own question.