James Rodriguez shone for Bayern Munich, scoring a goal and winning a penalty, as the German champions made it four wins from their first four Bundesliga games with a 2-0 victory at Schalke to stay top on Saturday.

Rodriguez struck with just eight minutes gone at Gelsenkirchen’s Veltins Arena, expertly slipping his marker, former Bayern team-mate Sebastian Rudy, to power home a header from Joshua Kimmich’s cross.

It was a sublime effort which left Schalke with too much to do, as they ended up suffering a fourth consecutive league defeat after finishing second last season, while Bayern are the only team with a 100-percent record.

The 27-year-old Colombian, making his first league start this season, should have scored his second when he squandered a golden chance five minutes after the break.

Veteran winger Franck Ribery sliced through Schalke’s defence and squared with goalkeeper Ralf Faehrmann beaten, but Rodriguez slumped to the turf, head in hands, after firing wide with the goal at his mercy.

To compound Schalke’s problems, US international Weston McKennie, 20, was carried off with a leg injury on 50 minutes.

Rodriguez then effectively settled the matter on 63 minutes after a foul in the area by Alessandro Schoepf.

Star striker Robert Lewandowski stepped up and smashed home the resulting spot-kick to make it 2-0.

Schalke had little to offer and only a superb save from Faehrmann kept out a long-range free-kick from David Alaba, which curled wickedly 12 minutes from time.

“We made a superb start and in the end deserved the win,” said Bayern’s ex-Schalke midfielder Leon Goretzka.

Ibisevic double

Earlier, second-placed Hertha Berlin, who host Bayern next Friday, had temporarily claimed top spot as captain Vedad Ibisevic scored twice in a 4-2 home win over Borussia Moenchengladbach.

After Gladbach’s Belgium midfielder Thorgan Hazard netted a 29th-minute penalty – his seventh goal in ten games against Hertha – Berlin roared back.

Ibisevic headed his first goal a minute after Hazard had struck, before Austria midfielder Valentino Lazaro scored with another header on 34 minutes.

Ibisevic slotted home Berlin’s third goal midway through the second half.

New signing Alassane Plea gave Gladbach hope with 23 minutes to go before Ondrej Duda scored Hertha’s fourth by tapping home a great cross from Dutch winger Javairo Dilrosun.

US international Christian Pulisic again rescued Borussia Dortmund, who had French defender Abdou Diallo sent off 15 minutes from time, with a late goal to equalise in a 1-1 draw at Hoffenheim.

“After the red card, many thought that it was over, but we came back. We can be happy with the result, we know that,” said Dortmund coach Lucien Favre, whose side are now third.

Hoffenheim took the lead just before the break when Brazilian forward Joelinton pounced on a mistake by Diallo.

Dortmund were saved as VAR spotted a marginal offside when Ermin Bicakcic headed into the net five minutes after the break.

Frenchman Diallo capped a bad day at the office when he was sent off on 76 minutes for bringing down Andrej Kramaric, who was through on goal.

Having marked his 20th birthday with the winner at Club Brugge on Tuesday in the Champions League, Pulisic equalised six minutes from time, converting a Marco Reus cross.

Elsewhere, Everton misfit Davy Klaassen scored his second goal in as many Bundesliga games to grab Werder Bremen a 3-2 win over Augsburg.

The Dutch playmaker, who cost Bremen 14 million euros ($16.3 million) in July, profited 15 minutes from time after Augsburg goalkeeper let the ball roll through his legs from a cross.

Korean midfielder Koo Ja-Cheol and Philipp Max had pulled Augsburg level after Max Kruse and Maximilian Eggestein put Werder 2-0 with early goals.

An Anton Waldemar own goal and a late second from Toerles Knoell sealed Nuremberg a 2-0 win at Hanover 96.

Germany striker Nils Petersen scored at the second attempt, heading home a parried first-half penalty, as Freiburg won 3-1 at Wolfsburg, who suffered their first loss of the season.