There are a couple of ways to achieve this but following your current implementation: why not set the isGrounded flag to false when you jump and just let the trigger handle resetting the flag when you land?
Some things you could check: Are all your colliders 2D and set to be triggers?
Have you checked your layer collisions are actually happening?
public class PlayerController : MonoBehaviour { //Movement public float speed; public float jump; float moveVelocity; //Grounded Vars bool isGrounded = true; void Update () { //Jumping if (Input.GetKeyDown (KeyCode.Space) || Input.GetKeyDown (KeyCode.UpArrow) || Input.GetKeyDown (KeyCode.Z) || Input.GetKeyDown (KeyCode.W)) { if(isGrounded) { GetComponent<Rigidbody2D> ().velocity = new Vector2 (GetComponent<Rigidbody2D> ().velocity.x, jump); isGrounded = false; } } moveVelocity = 0; //Left Right Movement if (Input.GetKey (KeyCode.LeftArrow) || Input.GetKey (KeyCode.A)) { moveVelocity = -speed; } if (Input.GetKey (KeyCode.RightArrow) || Input.GetKey (KeyCode.D)) { moveVelocity = speed; }