91³Ô¹ÏÍø

Watch CBS News

Walmart plans to remove synthetic dyes and 30 other food additives from its store brands

Walmart announced Wednesday that it would remove synthetic dyes and 30 other ingredients, including artificial sweeteners and preservatives, from its private-label food brands by 2027.

The retailer said the change would affect around 1,000 products, including salty snacks, baked goods, power drinks, salad dressings and frosting. Customers can expected to see some of the reformulated products on shelves in the coming months. Walmart told the Associated Press that the changes primarily affect Great Value, the company's largest private-label food brand.

Walmart, which serves customers a week globally, billed the change as a means to address changing consumer preferences. "Our customers have told us that they want products made with simpler, more familiar ingredients — and we've listened," Walmart U.S. CEO John Furner said in a statement.

The company also said the decision is in line with its goal to be more transparent around what goes into its private food brands, which include Great Value, Marketside, Freshness Guaranteed and Bettergoods.

"As the leading grocer in the U.S., this move will have a significant impact on the market and the safety of the food that so many Americans purchase for their families," said Brian Ronholm, director of food policy at Consumer Reports, in a statement.

Among the preservatives Walmart says it will remove are potassium nitrate, potassium nitrite and potassium bisulfite, which are used in processed meats. The company also said it will remove phthalates, a chemical used to make plastic flexible that is widely found in supermarket and fast foods.

Several of the ingredients on Walmart's removal list, including some of the 30 non-dyes, are already are banned, not widely used or have  in the U.S. food supply for decades. Others were included despite no known problems or have been targeted by the Trump administration for review and possible elimination as an approved food additive, according to food safety experts.

marketside-cakes.jpg
Walmart says it will remove synthetic dyes in all of the retailer's branded food products by 2027, including these cakes on display in one of its stores. Walmart

According to Walmart, 90% of its private brand products are already free from synthetic dyes.

The announcement comes amid a wider effort by food manufacturers eliminate dyes from their products. In recent months, Kraft Heinz and General Mills have also both they're nixing dyes. 

The federal government has also increased scrutiny on the potential health effects of artificial food dyes. In April, the Department of Health and Human Services (HHS) called on the food industry to stop using synthetic food dyes. HHS said the Food and Drug Administration will be work with the food industry to eliminate six remaining synthetic food dyes.

Walmart has previously taken steps to cater to health-conscious customers. In 2012, the company  produce and other food products with a "Great For You" icon to demonstrate that they meet certain nutritional standards. 

View CBS News In
CBS News App Open
Chrome Safari Continue
const link = doc.createElement('link'); link.rel = 'stylesheet'; link.href = '/fly/fly/bundles/cbsnewscontent/css/cmp-banner.min.css?v=296763317a51cab90faa73f1bb146d5c'; doc.head.appendChild(link); doc.body.innerHTML = CONSENT_MESSAGE; } else { el.insertAdjacentHTML('afterend', CONSENT_MESSAGE); } }); } function hidePrivacyMessage() { // Remove from the main document document.querySelectorAll(`.${CONSENT_MESSAGE_CLASS}`).forEach(el => el.remove()); // Remove from inside any iframes document.querySelectorAll('iframe').forEach(iframe => { const doc = iframe.contentDocument || iframe.contentWindow.document; doc.querySelectorAll(`.${CONSENT_MESSAGE_CLASS}`).forEach(el => el.remove()); }); } function activateGatedScripts() { // Handle both new format (cmp-gated-script) and old OneTrust/Ketch format (optanon-category-4) const gatedScripts = Array.from(document.querySelectorAll('script.cmp-gated-script, script.optanon-category-4')); // Activate scripts sequentially with a small delay to avoid timing issues let delay = 0; gatedScripts.forEach(function(placeholder, index) { setTimeout(function() { // Skip if already processed if (placeholder.hasAttribute('data-cmp-processed')) { return; } placeholder.setAttribute('data-cmp-processed', 'true'); const newScript = document.createElement('script'); newScript.type = 'text/javascript'; // Try new format first (data-cmp-src), then fall back to old format (data-src) const src = placeholder.getAttribute('data-cmp-src') || placeholder.getAttribute('data-src'); if (src) { newScript.src = src; } else if (placeholder.textContent) { // Inline script - just copy the content newScript.textContent = placeholder.textContent; } // Handle new format attributes (data-cmp-attrs) - for both inline and external scripts const attrs = placeholder.getAttribute('data-cmp-attrs'); if (attrs) { const tempDiv = document.createElement('div'); tempDiv.innerHTML = '
<\/div>'; const tempAttrs = tempDiv.firstChild.attributes; for (let i = 0; i < tempAttrs.length; i++) { // For external scripts, allow defer/async. For inline scripts, skip them (not valid) if (src || (tempAttrs[i].name !== 'async' && tempAttrs[i].name !== 'defer')) { newScript.setAttribute(tempAttrs[i].name, tempAttrs[i].value); } } } // Copy other attributes from old OneTrust format for (let i = 0; i < placeholder.attributes.length; i++) { const attr = placeholder.attributes[i]; // Skip attributes we've already handled or don't want to copy if (!['class', 'data-src', 'data-type', 'data-cmp-src', 'data-cmp-attrs', 'data-cmp-processed', 'type', 'async', 'defer', 'src'].includes(attr.name)) { newScript.setAttribute(attr.name, attr.value); } } placeholder.parentNode.replaceChild(newScript, placeholder); // If external script, manually trigger window.onload handlers after it loads // This handles widgets that use window.onload for initialization if (src) { newScript.addEventListener('load', function() { // If page already loaded and script set a new onload handler, trigger it if (document.readyState === 'complete' && window.onload) { const originalOnload = window.onload; window.onload = null; // Clear temporarily to prevent loops originalOnload(); // Execute the handler } }); } }, delay); delay += 500; // 500ms delay between each script to allow full loading }); } cbsoptanon.onScriptsReady(function(cmp) { cmp.ot.targetingAllowed(function(allowed) { if (!allowed) { showPrivacyMessage(); } else { activateGatedScripts(); } }); cmp.ot.awaitInitialConsent(function(consent_model) { cmp.ot.addOnConsentChangedHandler(function() { cmp.ot.targetingAllowed(function(allowed) { if (allowed) { hidePrivacyMessage(); activateGatedScripts(); } else { showPrivacyMessage(); } }); }); }); });