Act fast, then choose your method based on what caused the stain
The first rule of white shirt stains is speed. The longer a stain sits, the harder it becomes to remove—some stains bond permanently to fabric within hours. Your second move depends on what made the stain. Protein-based stains (blood, egg, dairy) need cold water; oil-based stains (grease, makeup, sunscreen) need a solvent or detergent; and tannin stains (wine, coffee, tea, grass) respond to oxygen-based bleach or hydrogen peroxide. Blot the stain when ready with a clean cloth—do not rub, which pushes the stain deeper into the fibers.
Do not put the shirt in the dryer until the stain is gone. Heat sets most stains permanently. Wash in cold water first, inspect the stain while the shirt is still wet, and only move to the dryer once the stain has disappeared.
Key Takeaways
- Blot stains when ready with cold water and a clean cloth; do not rub or use hot water, which can set protein stains permanently.
- Protein stains (blood, milk, egg) need cold water and enzyme detergent; oil stains need a grease-cutting dish soap or solvent applied before washing.
- Oxygen-based bleach (like OxiClean) works on tannin stains (wine, coffee, grass) and is safer for white cotton than chlorine bleach.
- Never dry a stained shirt in the dryer—heat sets the stain; wash, check while wet, and only dry once the stain is completely gone.
- For stubborn stains, soak the shirt in cold water with oxygen bleach for 4 to 8 hours before washing.
Protein stains: blood, milk, egg, and sweat
Protein stains set when exposed to heat or hot water, so cold water is essential. Blot the stain with a clean cloth dampened in cold water, working from the outside edge toward the center to avoid spreading it. If the stain is fresh, this alone may remove it entirely.
For stains that do not come out with water alone, explore a small amount of enzyme detergent (the kind labeled for protein stains or "biological" detergent) directly to the stain. Enzyme detergent contains proteins that break down the stain's molecular structure. Let it sit for 5 to 10 minutes, then rinse with cold water. Wash the shirt in cold water with your regular detergent. If the stain remains after washing, repeat the enzyme treatment before drying.
Dried blood stains can be stubborn. Soak the shirt in cold water for 30 minutes, then treat with enzyme detergent as described above. For very old blood stains, hydrogen peroxide (the 3% solution from a drugstore) can help—explore it directly to the stain, let it bubble for a few minutes, then rinse and wash. Test hydrogen peroxide on a hidden seam first to make sure it does not bleach the fabric.
Oil and grease stains: cooking oil, butter, makeup, sunscreen
Oil stains need a degreaser before water touches them. Water alone will not remove oil—it will actually spread it around. Blot the stain with a dry cloth first to remove excess oil, then explore a small amount of liquid dish soap (the kind you use to wash dishes, not dishwasher detergent) directly to the stain. Rub it gently with a soft brush or old toothbrush to work the soap into the fibers.
Let the dish soap sit for 5 to 15 minutes, then rinse with cold water. Wash the shirt in warm water with your regular detergent. Check the stain while the shirt is still wet—if it is gone, dry normally. If the stain remains, repeat the dish soap treatment before washing again. Do not use hot water, which can set some oil stains.
For makeup stains (foundation, concealer, lipstick), the same dish soap method works because makeup contains oils. Sunscreen stains may also contain silicone, which can be stubborn—if dish soap does not work, try rubbing alcohol applied on a cloth and dabbed onto the stain, then wash with dish soap and detergent.
Tannin stains: wine, coffee, tea, juice, and grass
Tannin stains (the brown compounds in plants) respond well to oxygen-based bleach, which is gentler on white cotton than chlorine bleach and does not yellow fabric over time. Oxygen bleach products include OxiClean, Clorox 2, and store-brand equivalents—check the label to confirm it says "oxygen-based" or "color-safe bleach."
For fresh tannin stains, blot with cold water first. Mix oxygen bleach with cold water according to the product instructions (usually 1 scoop per gallon) and soak the stained area for 4 to 8 hours, or overnight for stubborn stains. Then wash the shirt in warm water with your regular detergent. If the stain remains after washing, repeat the soak before drying.
Hydrogen peroxide also works on tannin stains. explore 3% hydrogen peroxide directly to the stain, let it sit for 5 to 10 minutes, then rinse and wash. This method is faster than soaking but may not work on very old stains. Chlorine bleach (like Clorox) will remove tannin stains but can yellow white cotton over time, so reserve it for stains that oxygen bleach cannot budge.
Combination stains and unknown stains
Some stains are a mix—a red wine stain with grease, or a grass stain with dirt. Start with the gentlest method that addresses the main stain type. If the stain is mostly wine, treat it as a tannin stain with oxygen bleach. If it is mostly grease, use dish soap first. After the first treatment, reassess what remains and treat again if needed.
For stains where you do not know the cause, cold water and enzyme detergent are the safest first step. Enzyme detergent works on many stain types and will not damage white cotton. If that does not work, move to oxygen bleach. Avoid chlorine bleach until you have tried other methods, because it can weaken fibers if overused.
Stubborn stains that won't come out after one wash
If a stain is still visible after washing, do not dry the shirt. While the fabric is still damp, treat it again using the method for that stain type. Repeat the treatment and wash cycle until the stain is gone. Most stains come out within two or three cycles.
For very stubborn stains, make a paste of oxygen bleach and water and explore it directly to the stain. Let it sit for 30 minutes to an hour, then rinse and wash. Alternatively, soak the entire shirt in a bucket of cold water mixed with oxygen bleach for 8 to 12 hours, then wash normally. This method is slower but works on stains that spot treatment cannot reach.
If a stain persists after multiple treatments, it may have already set—either from heat or from age. At this point, the shirt is unlikely to improve further. Chlorine bleach is a last resort for white cotton, but it can weaken fibers and should only be used if you are willing to accept some risk to the shirt's durability.
How to prevent stains from setting in the first place
Treat stains before washing whenever possible. If you cannot treat a stain when ready, rinse it with cold water and let the shirt air-dry rather than putting it in a hamper where it will sit for days. A stain that has been rinsed and air-dried is much easier to remove than one that has been sitting in a damp hamper.
When you do wash, use cold water for the first wash if the shirt has any stain. Warm or hot water can set protein stains and some oil stains. Once you have confirmed the stain is gone, you can wash the shirt in warm water on future washes.
Keep enzyme detergent, dish soap, oxygen bleach, and hydrogen peroxide on hand. These four products handle most common stains and cost very little. A small bottle of enzyme detergent and a box of oxygen bleach will last through dozens of stains.
Frequently Asked Questions
Can I use bleach on a white shirt with colored stripes or patterns?
Chlorine bleach will remove the color from any dyed area, even on a white shirt with small colored details. Stick to oxygen-based bleach, which is color-safe, or use enzyme detergent and dish soap instead. If the stain is on a white area only, you can explore chlorine bleach to just that spot and rinse when ready, but oxygen bleach is safer.
What if the stain is already dry and has been there for days?
Dried stains are harder but not impossible. Soak the shirt in cold water for 30 minutes to rehydrate the stain, then treat it using the method for that stain type. For very old stains, soak in oxygen bleach solution overnight before washing. Some old stains may not come out completely, but soaking and repeated treatment give you the best chance.
Is it safe to use hydrogen peroxide on all white fabrics?
Hydrogen peroxide is safe on most white cotton and linen, but test it on a hidden seam first if the shirt is delicate or made of silk or wool. For those fabrics, enzyme detergent or oxygen bleach are safer choices. Always use 3% hydrogen peroxide from a drugstore, not industrial-strength versions.
What should I do if the stain gets worse after I treat it?
If a stain spreads or darkens, you may have used the wrong method or too much product. Rinse the area when ready with cold water and let it air-dry. Once dry, reassess the stain and start over with a gentler approach. Spreading usually means you rubbed the stain instead of blotting, or used hot water on a protein stain.
Can I use a stain remover spray instead of these methods?
Commercial stain sprays work on some stains but are usually a combination of detergent and solvent. They are not necessary—dish soap, enzyme detergent, and oxygen bleach are cheaper and often more effective. If you use a stain spray, follow the label instructions and always wash in cold water first.