This was a problem I could not figure out for months.
Go to the Contacts app on iOS. Click the back arrow on the upper left labelled "Lists". If you an options for both "All Gmail" and "All iCloud", then you have apparently been saving some contact information to your Gmail account rather than iCloud. Why? I don't know.

Therefore, in order to sync that contact information to your macOS device, you need to either transfer your Gmail contacts to be on the iCloud account, or add your Gmail account to your macOS device. Since I do not know how to do the former, I did the latter, which worked for me. Go to macOS settings, click Internet Accounts, and add your Gmail account there. 

Hopefully this helps.