I figured out how to add base maps from Google without the QuickMapServices plugin. The link I was trying to use as a WMS connection is actually for XYZ tiles. QGIS 3.0 has a great new feature, the Data Source Manager, which makes it easy to add pretty much any type of layer except XYZ tiles.
So at first I thought that XYZ tiles weren't available in QGIS, or that maybe they had been rolled into one of the other data types that I don't really understand.
Instead, to add XYZ tiles I had to open the Browser panel, scroll down to the bottom, and right click on XYZ Tiles > New Connection
One Google layer successfully added to my project! :)
I also learned how to add a WMS layer. It's not all that hard once you have the right link, but I've found it quite challenging to find the right links.
The USGS has a lot of layers that cover the continental United States. That's not the link to paste into QGIS as the WMS URL. Follow that link and look through the different categories to get the actual links; each layer has its own link.
For example, this is the URL for a layer called "USGS Topo Base Map - Primary Tile Cache (Tiled)": https://basemap.nationalmap.gov/arcgis/services/USGSTopo/MapServer/WMSServer?request=GetCapabilities&service=WMS
And screenshots showing how to actually add that layer:
So now I have my Google layers back, as well as some new layers I didn't have before.
It seems like the QuickMapServices plugin was a bit of a crutch, because it allowed me to avoid ever learning how to use WMS and XYZ tiles. I'm still hoping it'll be updated for 3.0, but in the meantime I learned some new skills.
Update:
How to add any layer available through the QuickMapServices plugin to QGIS 3.0.
I just realized that the link for any layer added from the QuickMapServices plugin is available in the layer properties of that layer. So all you have to do is add that layer to a project in QGIS 2.18, open the layer properties, copy the link, and then use that link to add it as an XYZ tiled layer in 3.0.
Cause of Problem and Solution
The problem is subtle. What he had entered was:
"http://a.tile.opencyclemap.org/cycle/{z}/{x}/{y}.png "
Notice the extra trailing space after ".png" !
So, the problem is easily rectified as follow:-
(1) In the Layers panel, delete the problematic layer.
(2) In the Browser panel, edit the connection details , ie remove the trailing space.
(3) Re-Add the selected connection to canvas.
Misc Information
In the link given by the questioner, OpenStreetMap gave the URL for OpenCycleMap as "http://tile.thunderforest.com/cycle/${z}/${x}/${y}.png".
For QGIS on Windows, User can enter the URL where-is-as-is. For QGIS on MacOS, User must omit the "$", ie "http://tile.thunderforest.com/cycle/{z}/{x}/{y}.png".
As a recommendation, instead of using "a.tile.opencyclemap.org", the Questioner may wish to use "tile.thunderforest.com" as Host "a" be not be load-balanced.
Best Answer
Have you made sure your maps are using the same CRS as the tiles and conform with the zoom level default scales? (see below)
Use the Same Native CRS as Tiles
Most XYZ tiles are produced in CRS - EPSG:3857 . When using a different CRS this can skew the image and make the labels more difficult to read. See below
Conform with Zoom level default scales
XYZ tiles layers only produce labels at certain scales for a particular projection (typically CRS - EPSG:3857). Open street maps produces tiles at these default scales
So if you make sure any maps you produce use these same scales the labels should be legible. In the example below 1:4000 displays the same tile as 1:6000, but the 1:6000 is obviously not as legible