Dividend Yield Traps: How to Spot One
A dividend yield trap is a high yield produced by a falling price. See what the top yield decile did next, and the four checks that flag one early.
A dividend yield trap is a high dividend yield produced by a falling share price rather than by a generous payout. Yield is annual dividends per share divided by price, so a stock that loses half its value doubles its advertised yield without the company adding a cent to the check it writes. The top of any yield screen is populated by names the market has already marked down, and a measurable slice of them reduce or stop the dividend inside the following year. This page measures that slice and lays out the four checks that separate a cheap payer from a broken one.
Why the highest dividend yields sit on the biggest price falls
A yield has two moving parts that behave nothing alike. The numerator is the annual dividend rate, set by a board a handful of times a year and flat between those decisions. The denominator is the price, which moves every second the market is open. Only one of the two can change quickly, which makes almost every sharp jump in a yield a price story rather than a payout story.
Here is that split, measured on a fixed cohort. Every US-listed stock closing above $5 on June 30, 2025 that had paid a regular quarterly cash dividend in the prior twelve months is sorted into a band by the forward yield it advertised that day: its latest quarterly payment times four, divided by its closing price. The panel then looks backward at how each part of the fraction moved over the twelve months leading up to that date.
The exact SQL behind every number
WITH px_base AS (
SELECT ticker,
argMax(toFloat64(close), window_start) AS price
FROM global_markets.delayed_stocks_minute_aggs
WHERE toDate(toTimeZone(window_start, 'America/New_York')) = toDate('2025-06-30')
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY ticker
HAVING price >= 5
),
px_prior AS (
SELECT ticker,
argMax(toFloat64(close), window_start) AS price
FROM global_markets.delayed_stocks_minute_aggs
WHERE toDate(toTimeZone(window_start, 'America/New_York')) = toDate('2024-06-28')
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY ticker
HAVING price > 0
),
rate_base AS (
SELECT ticker,
argMax(toFloat64(cash_amount) * frequency, ex_dividend_date) AS annual_rate
FROM global_markets.stocks_dividends
WHERE distribution_type = 'recurring'
AND frequency = 4
AND cash_amount > 0
AND ex_dividend_date > toDate('2024-06-30')
AND ex_dividend_date <= toDate('2025-06-30')
GROUP BY ticker
),
rate_prior AS (
SELECT ticker,
argMax(toFloat64(cash_amount) * frequency, ex_dividend_date) AS annual_rate
FROM global_markets.stocks_dividends
WHERE distribution_type = 'recurring'
AND frequency = 4
AND cash_amount > 0
AND ex_dividend_date > toDate('2023-06-30')
AND ex_dividend_date <= toDate('2024-06-28')
GROUP BY ticker
)
SELECT multiIf(100 * rb.annual_rate / b.price >= 8, '8% and up',
100 * rb.annual_rate / b.price >= 6, '6-8%',
100 * rb.annual_rate / b.price >= 4, '4-6%',
100 * rb.annual_rate / b.price >= 2, '2-4%',
'under 2%') AS yield_band,
count() AS names,
round(quantileDeterministic(0.5)(100 * rb.annual_rate / b.price, cityHash64(b.ticker)), 2) AS median_yield_pct,
round(quantileDeterministic(0.5)(100 * (b.price / p.price - 1), cityHash64(b.ticker)), 1) AS median_price_change_pct,
round(quantileDeterministic(0.5)(100 * (rb.annual_rate / rp.annual_rate - 1), cityHash64(b.ticker)), 1) AS median_dividend_change_pct
FROM px_base AS b
INNER JOIN px_prior AS p ON b.ticker = p.ticker
INNER JOIN rate_base AS rb ON b.ticker = rb.ticker
INNER JOIN rate_prior AS rp ON b.ticker = rp.ticker
GROUP BY yield_band
ORDER BY median_yield_pctThe ladder runs one way. Names in the 8% and up band arrived at a median yield of 9.69% with a median price change of -2.4% over the prior year. The under 2% band posted 11.9% over the same period. The payout side barely separates the two: the median annualized dividend rate changed 0% in the top band against 5.5% in the bottom one. Sorting a list by yield is, to a first approximation, sorting it by twelve-month price decline. The highest dividend yield stocks screen shows the live version of that list. This page is about what sits underneath the first page of it.
What happened to the highest yielders over the next twelve months
Same cohort, same date, now looking forward. For each band the panel compares the annualized rate on the last regular payment before June 30, 2025 against the last regular payment made in the twelve months after it. A rate more than 1% lower counts as a reduction. No regular cash dividend at all in those twelve months counts as stopped. A payer that switched schedule is compared on the annualized rate, so a move from quarterly to monthly is not miscounted.
The exact SQL behind every number
WITH px_base AS (
SELECT ticker,
argMax(toFloat64(close), window_start) AS price
FROM global_markets.delayed_stocks_minute_aggs
WHERE toDate(toTimeZone(window_start, 'America/New_York')) = toDate('2025-06-30')
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY ticker
HAVING price >= 5
),
rate_before AS (
SELECT ticker,
argMax(toFloat64(cash_amount) * frequency, ex_dividend_date) AS annual_rate
FROM global_markets.stocks_dividends
WHERE distribution_type = 'recurring'
AND frequency = 4
AND cash_amount > 0
AND ex_dividend_date > toDate('2024-06-30')
AND ex_dividend_date <= toDate('2025-06-30')
GROUP BY ticker
),
rate_after AS (
SELECT ticker,
argMax(toFloat64(cash_amount) * frequency, ex_dividend_date) AS annual_rate
FROM global_markets.stocks_dividends
WHERE distribution_type = 'recurring'
AND frequency > 0
AND cash_amount > 0
AND ex_dividend_date > toDate('2025-06-30')
AND ex_dividend_date <= toDate('2026-06-30')
GROUP BY ticker
)
SELECT multiIf(100 * b.annual_rate / p.price >= 8, '8% and up',
100 * b.annual_rate / p.price >= 6, '6-8%',
100 * b.annual_rate / p.price >= 4, '4-6%',
100 * b.annual_rate / p.price >= 2, '2-4%',
'under 2%') AS yield_band,
count() AS payers,
round(quantileDeterministic(0.5)(100 * b.annual_rate / p.price, cityHash64(p.ticker)), 2) AS median_yield_pct,
round(100 * countIf(ifNull(a.annual_rate, 0) = 0) / count(), 1) AS pct_stopped_paying,
round(100 * countIf(ifNull(a.annual_rate, 0) > 0 AND a.annual_rate < b.annual_rate * 0.99) / count(), 1) AS pct_reduced_rate,
round(100 * countIf(ifNull(a.annual_rate, 0) = 0 OR a.annual_rate < b.annual_rate * 0.99) / count(), 1) AS pct_reduced_or_stopped,
round(100 * countIf(ifNull(a.annual_rate, 0) >= b.annual_rate * 0.99) / count(), 1) AS pct_maintained_or_raised
FROM px_base AS p
INNER JOIN rate_before AS b ON p.ticker = b.ticker
LEFT JOIN rate_after AS a ON p.ticker = a.ticker
GROUP BY yield_band
ORDER BY median_yield_pctOf the 330 names sitting in the 8% and up band on June 30, 2025, 36.4% either cut the annualized rate or made no regular payment at all over the next twelve months, split between 28.8% that reduced and 7.6% that stopped. The under 2% band, 1369 names deep, came in at 23.4%. Across all 5 bands the figure climbs with the yield.
Read the other side of the same panel before drawing a conclusion: 63.6% of that top band held the rate flat or raised it. A high yield is a hit rate, not a verdict on any single company. What the cohort does establish is the base rate a reader is fighting when they buy the top of a screen, and how much wider the outcomes get up there. The mechanics of what a board actually does when the cash gets tight are covered in dividend cuts.
Check one: does the payout ratio leave any room
The payout ratio is dividends per share divided by earnings per share. Below 100%, reported profit covers the dividend with something left over. Above it, the company is distributing more than it earned, funded from cash on hand, asset sales, or borrowing. Sorting today's payers by yield band shows how tightly the two travel together.
The exact SQL behind every number
SELECT multiIf(dividend_yield * 100 >= 8, '8% and up',
dividend_yield * 100 >= 6, '6-8%',
dividend_yield * 100 >= 4, '4-6%',
dividend_yield * 100 >= 2, '2-4%',
'under 2%') AS yield_band,
count() AS payers,
round(quantileDeterministic(0.5)(dividend_yield * 100, cityHash64(ticker)), 2) AS median_yield_pct,
round(quantileDeterministicIf(0.5)(dividend_yield * price / earnings_per_share * 100,
cityHash64(ticker), earnings_per_share > 0), 1) AS median_payout_ratio_pct,
round(100 * countIf(earnings_per_share > 0 AND dividend_yield * price > earnings_per_share)
/ countIf(earnings_per_share > 0), 1) AS pct_paying_over_earnings,
round(100 * countIf(earnings_per_share <= 0) / count(), 1) AS pct_no_positive_eps
FROM global_markets.stocks_ratios
WHERE date = (SELECT max(date) FROM global_markets.stocks_ratios)
AND price >= 5
AND market_cap >= 1000000000
AND dividend_yield > 0
AND earnings_per_share IS NOT NULL
GROUP BY yield_band
HAVING countIf(earnings_per_share > 0) > 0
ORDER BY median_yield_pctThe median payout ratio steps up at every band, from 21.5% in the under 2% group to 160.6% in the 8% and up group. The share of companies distributing more than they earn follows the same path: 2.6% at the bottom against 80.4% at the top. Another 23.3% of the highest band report no positive earnings per share at all, versus 9.6% of the lowest. The full arithmetic, including the cases where a ratio above 100% is normal, sits in the payout ratio guide.
Check two: is the yield far above the company's own range
A yield only means something against a reference. The market median answers one question, covered in what counts as a good dividend yield, and the company's own five-year range answers a sharper one: has this stock ever paid this much before. Conagra Brands, the packaged food company, traces the pattern month by month over the last five years.
The exact SQL behind every number
WITH px AS (
SELECT toStartOfMonth(toDate(toTimeZone(window_start, 'America/New_York'))) AS month_start,
argMax(toFloat64(close), window_start) AS price,
max(toDate(toTimeZone(window_start, 'America/New_York'))) AS last_day
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'CAG'
AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2021-08-01')
AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-07-31')
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY month_start
),
dv AS (
SELECT ex_dividend_date, toFloat64(cash_amount) AS cash_amount
FROM global_markets.stocks_dividends
WHERE ticker = 'CAG'
AND distribution_type = 'recurring'
AND frequency = 4
AND cash_amount > 0
AND ex_dividend_date >= toDate('2021-01-01')
)
SELECT formatDateTime(px.month_start, '%Y-%m') AS month,
formatDateTimeInJodaSyntax(px.month_start, 'MMMM yyyy') AS month_label,
round(any(px.price), 2) AS price_usd,
round(argMax(dv.cash_amount, dv.ex_dividend_date) * 4, 2) AS annual_dividend_usd,
round(argMax(dv.cash_amount, dv.ex_dividend_date) * 4 / any(px.price) * 100, 2) AS dividend_yield_pct
FROM px, dv
WHERE dv.ex_dividend_date <= px.last_day
GROUP BY px.month_start
ORDER BY px.month_startRead the three columns together across the 60 months. The annualized dividend rate went from $1.25 a share in August 2021 to $0.7 in July 2026. The price went from $33.11 to $14.52 over the same stretch. The yield, the first divided by the second, moved from 3.78% to 4.82%. Nothing in the payout schedule explains a move of that size. A screener sorted by yield surfaces the result of the denominator and shows none of the working.
That is the whole diagnostic in one chart. When a yield sits at multiples of its own five-year normal, the question worth asking is what changed in the business the market is pricing, not how attractive the ratio looks today.
Two more checks before the screen
Check three is cash. Dividends are paid in cash, while earnings are an accounting figure after non-cash charges. A payout ratio under 100% of earnings can still sit above 100% of the free cash flow the business actually generated, and a payout funded out of the balance sheet has a shorter runway than one funded out of operations. Compare the annual dividend bill against operating cash flow minus capital spending, over several years rather than one.
Check four is the peer median. Yields cluster by industry: regulated utilities, real estate trusts, and pass-through partnerships pay several times what a software company pays, and the structure explains the level. A REIT must distribute most of its taxable income to keep its tax status. Within an industry, though, a yield at double the peer median is a genuine outlier, and the peer group is the only fair benchmark for it. One last wrinkle worth knowing: a screen quoting a trailing yield sums payments already made, so it can advertise a dividend that was cut months ago. The difference is laid out in trailing versus forward dividend yield, and the underlying arithmetic in what dividend yield measures.
Dividend yield trap FAQ
What is a dividend yield trap?
It is a high dividend yield created by a falling share price rather than a rising payout. The clue is in the fraction: over the twelve months before June 30, 2025, the 8% and up band showed a median price change of -2.4% while its median dividend rate changed 0%.
Does a high dividend yield mean a cut is coming?
No single yield predicts anything, but the base rates differ sharply by band. Over the twelve months after June 30, 2025, 36.4% of the 8% and up cohort reduced or stopped the payment, against 23.4% of the under 2% cohort. The remaining 63.6% of the top band held or raised.
What payout ratio is too high?
At an ordinary operating company, anything above 100% means the dividend exceeds reported earnings. At the latest snapshot on file, the median payer in the 8% and up band ran 160.6%, and 80.4% of that band paid out more than it earned. REITs and partnerships routinely exceed 100% on earnings and are judged on cash flow instead.
How can you check a dividend before trusting the yield?
Four readings cover most of it: the payout ratio against earnings, the dividend bill against free cash flow, the current yield against the company's own multi-year range, and the yield against the peer median for its industry. Each one is a comparison, and a headline yield on its own supplies none of them.
Every figure above comes from a stored, versioned query over filed dividend records and real closing prices. Open any panel's SQL, or run the same screen yourself on the Strasmore terminal.
Method and data notes
- The cohort is fixed at June 30, 2025: every US-listed stock closing above $5 that day with at least one regular quarterly cash dividend in the prior twelve months. Special and one-off distributions are excluded throughout.
- Yield in the cohort panels is the forward rate: the latest regular quarterly payment times four, divided by the closing price that day. The payout ratio panel uses the ratios table's trailing yield instead, which sums the last twelve months of payments.
- Reduced means the annualized rate on the next regular payment came in more than 1% below the rate in force at the cohort date. Stopped means no regular cash dividend with an ex-dividend date in the following twelve months.
- Band sizes run from 1369 names in the under 2% band to 330 in the 8% and up band, so the top band's percentages move on far fewer companies than the bottom band's.
- Medians use deterministic quantiles keyed on the ticker, so two renderings of the same statistic cannot drift apart.