What is a good way to structure mark-up generating code and avoid the example mess?
A good practice is Observe which part of the code does not change Extract that keep it in a separate method.  Pass the variable Which changes as an input to that method.

    public string CommonMethod(string formattedString)
    {
        string title = GetTitle();
        string mediaType = GetMediaType();
        string description = GetDescription();
        /***string releaseYear = GetReleaseYear();***/ this is not required.
        string contributors = GetContributors();
        string image = GetImage();
        string genres = GetGenres();
        string ratings = GetRatings();

        string top = **formattedString**;

        StringBuilder metadata = new StringBuilder();
        metadata.AppendLine(contributors + "&lt;br&gt;");
        metadata.AppendLine(genres + "&lt;br&gt;&lt;br&gt;");
        metadata.AppendLine(ratings + "&lt;br&gt;&lt;br&gt;");
        metadata.AppendLine(description);

        return string.Format("{0}&lt;table&gt;&lt;tr&gt;&lt;td style=\"width:400px; vertical-align:top\"&gt;{1}&lt;/td&gt;&lt;td style=\"width:400px; vertical-align:top\"&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;", top, metadata.ToString(), image);
    }


each time the difference might be on a different line or couple of lines.

This part is difficult to answer. Even in that scenario, omit the one or two lines which may change, pass the things which may change as input.