Display points labels starting at certain zoom level
You have to define 2 different sld:Rules using MaxScaleDenominator. In the first one, add the style to render the label (the TextSymbolizer in my example), and specify the desired zoom level with the right MaxScaleDenominator. In the second rule, define a different style without the label. Basically, a rule contains a style, an only the style whith the satisfied rule is applied to the features.
This is one of my sld
<?xml version="1.0" encoding="UTF-8"?>
<sld:StyledLayerDescriptor xmlns="http://www.opengis.net/sld" xmlns:sld="http://www.opengis.net/sld" xmlns:ogc="http://www.opengis.net/ogc" xmlns:gml="http://www.opengis.net/gml" version="1.0.0">
<sld:NamedLayer>
<sld:Name>locations_table</sld:Name>
<sld:UserStyle>
<sld:Name>locations_table</sld:Name>
<sld:Title>A boring default style</sld:Title>
<sld:Abstract>A sample style that just prints out a green line</sld:Abstract>
<sld:FeatureTypeStyle>
<sld:Name>name</sld:Name>
<sld:Rule>
<sld:MaxScaleDenominator>68000.0</sld:MaxScaleDenominator>
<sld:PointSymbolizer>
<sld:Graphic>
<sld:Mark>
<sld:WellKnownName>circle</sld:WellKnownName>
<sld:Fill>
<sld:CssParameter name="fill">#FF0000</sld:CssParameter>
</sld:Fill>
</sld:Mark>
<sld:Size>
<ogc:Literal>4</ogc:Literal>
</sld:Size>
</sld:Graphic>
</sld:PointSymbolizer>
<sld:TextSymbolizer>
<sld:Label>
<ogc:PropertyName>name1</ogc:PropertyName> <![CDATA[
]]><ogc:PropertyName>name2</ogc:PropertyName>
</sld:Label>
<sld:Font>
<sld:CssParameter name="font-family">Arial</sld:CssParameter>
<sld:CssParameter name="font-size">11</sld:CssParameter>
<sld:CssParameter name="font-style">normal</sld:CssParameter>
<sld:CssParameter name="font-weight">bold</sld:CssParameter>
</sld:Font>
<sld:LabelPlacement>
<sld:PointPlacement>
<sld:AnchorPoint>
<sld:AnchorPointX>
<ogc:Literal>0.5</ogc:Literal>
</sld:AnchorPointX>
<sld:AnchorPointY>
<ogc:Literal>0.0</ogc:Literal>
</sld:AnchorPointY>
</sld:AnchorPoint>
<sld:Displacement>
<sld:DisplacementX>
<ogc:Literal>0</ogc:Literal>
</sld:DisplacementX>
<sld:DisplacementY>
<ogc:Literal>5</ogc:Literal>
</sld:DisplacementY>
</sld:Displacement>
<sld:Rotation>
<ogc:Literal>0.0</ogc:Literal>
</sld:Rotation>
</sld:PointPlacement>
</sld:LabelPlacement>
<sld:Fill>
<sld:CssParameter name="fill">#000000</sld:CssParameter>
</sld:Fill>
<sld:VendorOption name="conflictResolution">true</sld:VendorOption>
</sld:TextSymbolizer>
</sld:Rule>
<sld:Rule>
<sld:MinScaleDenominator>68000.0</sld:MinScaleDenominator>
<sld:PointSymbolizer>
<sld:Graphic>
<sld:Mark>
<sld:WellKnownName>circle</sld:WellKnownName>
<sld:Fill>
<sld:CssParameter name="fill">#FF0000</sld:CssParameter>
</sld:Fill>
</sld:Mark>
<sld:Size>
<ogc:Literal>6</ogc:Literal>
</sld:Size>
</sld:Graphic>
</sld:PointSymbolizer>
</sld:Rule>
</sld:FeatureTypeStyle>
</sld:UserStyle>
Checkout the following sentences:
<sld:MinScaleDenominator>68000.0</sld:MinScaleDenominator>
<sld:MaxScaleDenominator>68000.0</sld:MaxScaleDenominator>
They set the limits to apply a rule.
Examples: in the official GeoServer docs and this other doc