diff --git a/src/traces/scattergl/convert.js b/src/traces/scattergl/convert.js
index dc9231fe590..6aa788af67e 100644
--- a/src/traces/scattergl/convert.js
+++ b/src/traces/scattergl/convert.js
@@ -112,6 +112,11 @@ function convertTextStyle(trace) {
     var i;
 
     optsOut.text = trace.text;
+    if(Array.isArray(optsOut.text)) {
+        for(i = optsOut.text.length; i < count; i++) {
+            optsOut.text[i] = '';
+        }
+    }
     optsOut.opacity = trace.opacity;
     optsOut.font = {};
     optsOut.align = [];
diff --git a/test/jasmine/tests/scattergl_test.js b/test/jasmine/tests/scattergl_test.js
index bc973b9c219..67a3813b51d 100644
--- a/test/jasmine/tests/scattergl_test.js
+++ b/test/jasmine/tests/scattergl_test.js
@@ -105,6 +105,20 @@ describe('end-to-end scattergl tests', function() {
         }).catch(failTest).then(done);
     });
 
+    it('@gl should handle a plot with less text labels than data points', function(done) {
+        expect(function() {
+            Plotly.plot(gd, [{
+                'type': 'scattergl',
+                'mode': 'markers+text',
+                'x': [3, 2, 1, 0],
+                'y': [0, 1, 4, 9],
+                'text': ['1', '2', '3'],
+                'textposition': 'top center'
+            }]);
+        }).not.toThrow();
+        done();
+    });
+
     it('@gl should be able to toggle visibility', function(done) {
         var mock = require('@mocks/gl2d_10.json');
         var _mock = Lib.extendDeep({}, mock);