I will first state I do NOT own a Moto G4, I own the G3 and the X Pure which are both 3rd Gen devices, but I was requested to write this tutorial by a few users here due to lots of failed root attempts using older "standard" methods that do not work on this device. I also do not like the "one click" root methods, because they can and do fail (KingoRoot will brick a Moto G3/4, regardless of what it's web page says), and when they do people have no idea how to fix it. The manual way is not difficult, and it teaches you how to work on, fix, and use your device on a level above that of the average smartphone user.
I will only cover rooting, the prerequisites are covered elsewhere in detail and I will link to reliable sources for the information. Specifics of the prerequisites are outside of the scope of this tutorial, but are open for discussion in this thread. Remember, I do not own this device although the methods used are the same as similar devices.
0) Be running Marshmallow (Android 6.x) stock ROM, at this time Nougat (Android 7.x) is not working via any method.
1) Device must have an unlocked bootloader. See Moto - Unlocking the Bootloader for more info.
NOTE: As of 7/18/2016, Amazon ad-subsidised Moto G 4th Gen devices cannot be bootloader unlocked, therefore they cannot be rooted. Sorry, Lollipop and newer Android security changes pretty much put an end to that.
2) You need to have TWRP installed or one-time booted via fastboot. CWM and other recoveries will NOT work at this time. See TWRP's Moto G 2016 page
3) You need a copy of the latest stable SuperSU ZIP from Chainfire's site on the internal storage or SD card of your device. SR1-SuperSU-v2.78-SR1-20160915123031.zip is the lastest version verified to work with this method.
Note: Do NOT use any 2.77 version, it was a beta intended specifically for the SG Note 7 and will not work, it does not harm but fails to root.
4) Reboot and start TWRP recovery, and PERFORM A COMPLETE BACKUP IN TWRP (Nandroid)!!!
How to do it:
Now, the procedure is the same whether you are trying to root the first time, or you did it the old way just flashing SuperSU and are now not able to boot...
In TWRP, go to Advanced and open the Terminal, in the terminal type this EXACTLY as shown:
Why do I have to do this???
For whatever reason, the install script for SuperSU does not recognize that this device (like many others) requires a systemless root installation. By creating /data/.supersu in the TWRP recovery environment, the SuperSU install script parses the file and sees "SYSTEMLESS=true" and ignores what it auto-detects and forces a systemless root installation.
Hope this is helpful to someone!
As always, if this is the first time you have booted TWRP or attempted root... BACKUP IN TWRP FIRST!!! Once the system is modified, it cannot be undone (easily) and you will always have a known good starting place if the worst happens.
EDIT: Photos added showing what a proper command and flash should look like. Note that in picture 1 the exit command is not needed, you can just back out. In pictures 2 and 3 a proper flash of SuperSU is shown, note that system-less mode is specified and the boot image is patched, this is what should occur. It is normal for it to loop once or twice, but that is it, first boot could take 10 minutes plus.
Notes on Nougat/Android 7... At this time this method of rooting does not work properly on the official Nougat ROM for this device, it causes WiFi issues and interface problems (settings crashes, etc) and with no complete factory image there is no work fix other than to restore your Nandroid backup to pre-root status. If you wish to play with this method and try it, your on your own, I will try to assist but as I stated earlier I do not own this device. To my knowledge as of this posting, there is no working root on stock Android 7 on this device.