Troubleshooting
Magento 2 Indexer Stuck or Failing: A Complete Reindex Troubleshooting Guide
An indexer stuck permanently on "reindex required," or one that fails partway through with no obvious cause, is one of the more disruptive Magento issues — product and price changes silently stop reaching the storefront.
Step 1: Check Actual Indexer Status
bin/magento indexer:status
bin/magento indexer:infoThis tells you which indexers exist, their current mode (Update on Save vs Update by Schedule), and whether each one thinks it's up to date.
Cause 1: Scheduled Indexing, But Cron Isn't Running
If your indexers are set to "Update by Schedule," they only actually run when Magento's cron fires. A stuck "reindex required" status is often just cron silently not running at all.
crontab -lConfirm Magento's cron entries are present and actually executing (check var/log/cron.log if configured, or just run it manually to test):
bin/magento cron:runIf cron works fine for other scheduled tasks but indexing specifically never catches up, check the indexer cron group hasn't been disabled in crontab.xml overrides or cron_schedule table entries stuck in a missed or error state.
Cause 2: Memory Exhausted Mid-Reindex
Large catalogs (tens of thousands of SKUs with many attributes) can exceed PHP's memory limit partway through a full reindex, which fails silently or with a generic fatal error.
php -d memory_limit=4G bin/magento indexer:reindex catalog_product_flatIf bumping memory fixes it, that confirms the cause — but check whether it's climbing because of a genuinely large catalog or because a custom indexer plugin is loading more data than it needs to per batch.
Cause 3: Corrupted Index or Missing MView Tables
If reindexing throws SQL errors about missing tables, or the indexer behaves inconsistently no matter what you try, resetting it is usually faster than debugging further:
bin/magento indexer:reset
bin/magento indexer:reindexindexer:reset rebuilds the indexer's tracking tables from scratch — safe to run, though a full reindex afterward can take a while on a large catalog.
Cause 4: Search Engine Connection Issues
If catalogsearch_fulltext is the one specifically failing, the problem is usually the connection to Elasticsearch/OpenSearch rather than Magento itself.
curl -X GET "http://localhost:9200/_cluster/health?pretty"A red or unreachable cluster means the reindex will fail regardless of anything you change on the Magento side. Check the configured host/port match reality:
bin/magento config:show catalog/search/elasticsearch7_server_hostname
bin/magento config:show catalog/search/elasticsearch7_server_portReindex One Indexer at a Time
When debugging, avoid indexer:reindex with no arguments — it reindexes everything and makes it harder to isolate which one is actually the problem.
bin/magento indexer:reindex catalog_category_product
bin/magento indexer:reindex catalog_product_price
bin/magento indexer:reindex catalogsearch_fulltextRun each individually and watch which one throws or hangs.
Prevention Going Forward
- For catalogs beyond a few thousand SKUs, "Update by Schedule" plus a monitored cron is almost always the right call over "Update on Save."
- Alert on
cron_scheduleentries stuck inmissed/errorstatus rather than discovering it from a stale storefront. - Keep search engine health checks in your monitoring, not just Magento's own status commands — a healthy indexer status can still mask a search cluster that's degraded.