The “One or more indexers are invalid” message usually means Magento 2 has data changes that have not been rebuilt into its indexed tables yet. The fastest safe fix is to check indexer status, reset invalid or stuck indexers, run reindexing from the CLI, then confirm cron is running correctly. Adobe’s official cron jobs guide is the best starting point for cron setup, and this Magento StackExchange thread covers the common CLI reindex approach.
If you are regularly fighting indexer issues, it may also be worth reviewing whether your platform setup still fits your operations. Our Shopify vs BigCommerce comparison can help if you are weighing Magento against simpler SaaS options.
- Start with bin/magento indexer:status before running fixes.
- Use bin/magento indexer:reset when an indexer is stuck, then reindex.
- Cron failures are one of the most common reasons invalid indexers keep coming back.
- Check database locks carefully, especially in production.
- Watch memory limits, third-party extensions, and container scheduling in Kubernetes environments.
Step 1: Check Magento 2 Indexer Status

Adobe Commerce / Magento
Unlock the Full Power of Adobe Commerce
Custom Magento development built for your catalog, your pricing, and your workflows.
Run:
php bin/magento indexer:status
You may see indexers like:
- catalog_product_price
- cataloginventory_stock
- catalog_category_product
- catalogsearch_fulltext
If one or more show as invalid, run:
php bin/magento indexer:reindex
For a specific indexer:
php bin/magento indexer:reindex catalog_product_price
If the indexer is stuck or will not move out of processing, reset it first:
php bin/magento indexer:reset php bin/magento indexer:reindex
Then clear cache:
php bin/magento cache:clean
Step 2: Choose the Right Indexer Mode
Magento indexers usually run in one of two modes:
| Mode | Best For | Watch Out For |
|---|---|---|
| Update on Save | Smaller stores or admin-heavy workflows | Can slow product saves |
| Update by Schedule | Most growing Magento stores | Requires healthy cron |
For most production stores, Update by Schedule is the better fit because it moves indexer work away from admin save actions. The tradeoff is simple: cron has to work. If cron is broken, the storefront can fall behind on price, stock, or catalog updates.
That matters for operations like shipping promises and stock accuracy. If fulfillment reliability is a priority, our guide to ecommerce shipping covers related customer-experience risks.
Set mode with:
php bin/magento indexer:set-mode schedule
Or for save mode:
php bin/magento indexer:set-mode realtime
Step 3: Verify Cron Health
Run cron manually:
php bin/magento cron:run
Then check the cron_schedule database table:
SELECT job_code, status, scheduled_at, executed_at, finished_at FROM cron_schedule ORDER BY scheduled_at DESC LIMIT 20;
Look for repeated errors, missed, or old pending jobs. Also confirm:
- The correct PHP binary path is used.
- Cron runs as the Magento file owner.
- Environment variables match production.
- Logs are being written and rotated.
- The server time and container time are correct.
Step 4: Clear Stuck Indexer Locks Carefully
If an indexer is stuck in “working,” inspect the indexer_state table:
SELECT * FROM indexer_state;
Look for indexers stuck with a processing status. Before changing database values, take a backup or snapshot. Then use Magento CLI first:
php bin/magento indexer:reset catalog_product_price
Direct database edits should be a last resort, not the default fix. They can hide the real issue, especially if the cause is cron, deadlocks, or a bad extension.
Step 5: Isolate Extension Conflicts
Third-party extensions can trigger repeated invalidation if they modify products, prices, stock, or catalog rules incorrectly.
Use this framework:
- Check recent deployments and module updates.
- Review logs around the time the indexer failed.
- Disable one suspect module in staging.
- Reindex and compare results.
- Re-enable modules one at a time.
Do not troubleshoot this directly on production unless you have no safer option. For larger stores, structured release testing matters. The Lights Online case study is a useful example of why Magento operations need more than quick admin fixes.
Step 6: Check Resource Limits and Containers
Large catalogs can fail reindexing because of memory, timeout, or database pressure or even development and design issues. Review:
- PHP memory limit
- MySQL temporary table size
- OpCache settings
- Long-running query limits
- CPU and memory throttling
In Kubernetes, also confirm that cron jobs run in the right pod context, use persistent configuration, and are not killed before completion. If a pod restarts during reindexing, Magento may leave an indexer in a bad state.
Production Monitoring Best Practices
Website Development
Your Website Should Work as Hard as You Do
We design and build ecommerce sites engineered for performance and growth.
At minimum, monitor:
- bin/magento indexer:status
- Failed or missed cron jobs
- Reindex duration
- Database deadlocks
- Error logs after deployments
- Stock and price update delays
The practical goal is simple: catch indexing failures before customers see stale prices, incorrect inventory, or missing products. Fixing the error once is good. Preventing it from becoming a weekly surprise is better.
References
- Adobe Experience League: Configuration Guide
- GitHub: Magento 2 CLI Commands



