describe method
A human-readable report, grouped by page.
Implementation
String describe() {
final buffer = StringBuffer();
if (findings.isEmpty) {
buffer.writeln('esen_seo audit: $pagesAudited pages, no findings.');
if (partial) {
buffer.writeln(
'WARNING: some pages failed to resolve, so cross-page checks '
'were skipped. This is not a clean bill of health.',
);
}
return buffer.toString();
}
buffer.writeln('esen_seo audit: $pagesAudited pages, '
'$errorCount error(s), $warningCount warning(s), $infoCount info.');
if (partial) {
buffer.writeln(
'WARNING: some pages failed to resolve — cross-page checks '
'(duplicate titles, hreflang, internal links) were skipped.',
);
}
buffer.writeln();
// Site-wide findings first, then page by page.
final siteWide = findings.where((f) => f.path == null).toList();
if (siteWide.isNotEmpty) {
buffer.writeln('site:');
for (final f in siteWide) {
buffer.writeln(' ${_line(f)}');
}
buffer.writeln();
}
final byPath = <String, List<SeoFinding>>{};
for (final f in findings) {
if (f.path != null) byPath.putIfAbsent(f.path!, () => []).add(f);
}
final paths = byPath.keys.toList()..sort();
for (final path in paths) {
buffer.writeln('$path:');
for (final f in byPath[path]!) {
buffer.writeln(' ${_line(f)}');
}
buffer.writeln();
}
return buffer.toString();
}