Unknown physics regarding teleporting (as in moving their position) a player within a game?

So this is my code:

local Players = {}

function TeleportTarget(part, Target)
	wait()
	local Player = game.Players:GetPlayerFromCharacter(part.Parent) or game.Players:GetPlayerFromCharacter(part.Parent.Parent)
	if Player then
		if Players[Player.Name] then
			if tick() - Players[Player.Name] >= 3 then
				Players[Player.Name] = tick()
				Player.Character.HumanoidRootPart.Position = Target.Position
			end
		else
			Players[Player.Name] = tick()
			Player.Character.HumanoidRootPart.Position = Target.Position
		end
	end
end

for _, Teleport in pairs(workspace.Teleports:GetChildren()) do
	if Teleport.TeleportA.Enabled.Value then
		Teleport.TeleportA.Touched:Connect(function(part)
			TeleportTarget(part, Teleport.TeleportB)
		end)
	end
	if Teleport.TeleportB.Enabled.Value then
		Teleport.TeleportB.Touched:Connect(function(part)
			TeleportTarget(part, Teleport.TeleportA)
		end)
	end
end

Its designed to prevent players from being spam teleported about, not this works within a workspace script, however once I put this into the server (so I can do one big script) when a player who joins later comes along the player who teleported will be invisible and not teleported over.

Is their some physics I don’t know about or some network ownership issue? To be aware, players have models attached to them with welds - this shouldn’t matter as the head should at least be there.

The server recognises the player is where they should be, but the future client doesn’t.