German Chancellor Angela Merkel's party has won a state election in its centre-left rivals' traditional heartland, a stinging blow to the challenger in September's national vote.
The western state of North Rhine-Westphalia is Germany's most populous and has been led by the Social Democrats for all but five years since 1966.
It is also the home state of Martin Schulz, the Social Democrat seeking to deny Mrs Merkel a fourth term in the September election.
Mr Schulz had been hoping for a boost after two previous state election defeats sapped his party's momentum.
Instead, Mrs Merkel's Christian Democratic Union won 33% of the vote in the election for the state legislature, with the Social Democrats trailing on 31.2%.
Social Democrat governor Hannelore Kraft's coalition lost its majority as her junior governing partners, the Greens, took only 6.4%. Conservative challenger Armin Laschet, a deputy leader of Mrs Merkel's party, was set to replace Ms Kraft.
"The CDU has won the heartland of the Social Democrats," said the conservatives' general secretary, Peter Tauber.
"This is a difficult day for the Social Democrats, a difficult day for me personally as well," Mr Schulz, who was not on the ballot on Sunday, told supporters in Berlin.
"I come from the state in which we took a really stinging defeat today."
He urged the party to concentrate now on the national election, saying: "We will sharpen our profile further - we have to as well.
"We will continue fighting; the result will come on September 24."
The Social Democrats' national ratings soared after Mr Schulz, a former European Parliament president, was nominated in January as Mrs Merkel's challenger.
But defeats in two other state elections since late March punctured the party's euphoria over his nomination.
The Social Democrats' result in Sunday's election, the last before the national vote, was their worst in North Rhine-Westphalia since the Second World War.
In the state's last election in 2012, the Social Democrats beat the CDU by 39.1% to 26.3%.
The pro-business Free Democrats won a strong 12.6% of the vote on Sunday after a campaign headed by their national leader, Christian Lindner.
That gave the party, with which Mrs Merkel governed Germany from 2009 to 2013, a strong base for its drive to return to the national parliament in September after it was ejected four years ago.
The nationalist Alternative for Germany won 7.4%, giving it seats in its 13th state legislature. The opposition Left Party fell just short of the 5% needed to win seats.
The result gives the CDU and Free Democrats a very slim majority. If they cannot agree on a governing alliance, Mr Laschet could opt for a "grand coalition" of the biggest parties with the Social Democrats.
A "grand coalition" would mirror Mrs Merkel's national government, in which the Social Democrats are the junior partners.
Mrs Merkel's party seemed keen not to appear too euphoric, insisting that regional issues played the key role.
Asked about Germany's government after September her chief of staff, Peter Altmaier, said: "We always have to keep a cool head ... we shouldn't talk about coalitions before the harvest is in."
National polls show the Social Democrats trailing Mrs Merkel's conservatives by up to 10 points after drawing level earlier this year.