It is sometimes very hard to distinguish adjectives and adverbs in German neither of them carries a tell-tale suffix like the English -ly, the French -ment or the Finnish -sti. Instead, most adverbs are indistinguishable from the corresponding adjectives in their uninflected forms.
However, once the form is inflected (or is not inflected) it is easy to tell whether we are dealing with an adjective or an adverb. Further clues include how the sentence can be rearranged. In your example sentence, not only does the lack of inflection tell me that gut is an adverb but I can also move Englisch around while leaving gut where it is; signifying that they are different sentence fragments and do not belong together:
Ich spreche sehr gut Englisch.
Englisch spreche ich sehr gut.
Incidentally, the corresponding sentence with an adjective instead of an adverb is correct, too; it only has a slightly different nuance in its meaning. Note how upon rearranging, the attributive adjective sehr gutes sticks to the noun it is modifying:
Ich spreche sehr gutes English.
Sehr gutes Englisch spreche ich.
The difference is that the adjective (gutes Englisch) modifies the quality of the English you are speaking. It contrasts a ‘good’ English and an (unmentioned) ‘bad’ English. Maybe you consider an English good if it does not contain slang words or something. The adverb modifies the quality of your speaking. Potentially, you might consider fluent speaking ‘good’ speaking or the choice of wrong words in context ‘bad’.
The difference also somewhat translates into English; compare the following:
Ich spreche sehr gut Englisch.
I speak English very well.
Ich spreche sehr gutes Englisch.
I speak a very good English.