diff --git a/docs/toc.yml b/docs/toc.yml index 9251fb8bad..44ab5da5f6 100644 --- a/docs/toc.yml +++ b/docs/toc.yml @@ -1833,6 +1833,31 @@ items: - name: Overview href: solution-guidance/Office-365-development-patterns-and-practices-solution-guidance.md + - name: Assess and transform classic pages + href: transform/assess-sharepoint-modernization.md + items: + - name: Assess classic pages + href: transform/assessment-tool-classic-pages.md + items: + - name: Requirements + href: transform/assessment-tool-classic-pages-requirements.md + - name: Run the assessment + href: transform/assessment-tool-classic-pages-run.md + - name: Interpret and prioritize + href: transform/assessment-tool-classic-pages-report.md + - name: Publishing page readiness + href: transform/assessment-tool-publishing-coverage.md + - name: Reference + items: + - name: Classic pages CSV files + href: transform/assessment-tool-classic-pages-csv.md + - name: Common CSV files + href: transform/assessment-tool-common-reports.md + - name: Transform classic pages + href: transform/modernize-userinterface-site-pages.md + items: + - name: Transform with PnP PowerShell + href: transform/modernize-userinterface-site-pages-powershell.md - name: Modernizing your classic SharePoint sites items: - name: Overview diff --git a/docs/transform/assess-sharepoint-modernization.md b/docs/transform/assess-sharepoint-modernization.md new file mode 100644 index 0000000000..5da2dd7e34 --- /dev/null +++ b/docs/transform/assess-sharepoint-modernization.md @@ -0,0 +1,44 @@ +--- +title: Assess and transform classic SharePoint pages +description: Assess classic SharePoint pages, prioritize remediation, and continue into page transformation with PnP PowerShell. +ms.date: 07/27/2026 +ms.localizationpriority: high +ms.service: sharepoint +--- + +# Assess and transform classic SharePoint pages + +Use the Microsoft 365 Assessment tool to discover classic pages and understand their page-transformation readiness. Then use the assessment results to prioritize remediation and transform selected pages with PnP PowerShell. + +This guidance focuses only on classic page assessment and its handoff to page transformation. + +## Page modernization workflow + +[!INCLUDE [classic-page-modernization-workflow](../../includes/snippets/assessment/classic-page-modernization-workflow.md)] + +## Use assessment output for transformation + +| Assessment output | Transformation decision | +| --- | --- | +| `PageUrl`, `PageType`, `Layout` | Identify the source page and transformation path. | +| `HomePage`, `UncustomizedHomePage` | Select home pages and simple early migration waves. | +| `MappingPercentage`, `UnmappedWebParts` | Find pages that need Web Part remediation or mapping changes. | +| `classicpagewebparts.csv` | Review the exact Web Part type, position, visibility, and mapping result. | +| `ModifiedAt`, `classicpageauditusage.csv` | Prioritize active content and avoid transforming unused pages without a business need. | +| `classicpublishingsitesummaries.csv` | Size publishing-page work and identify used layouts. | + +Mapping readiness is an input to planning, not a guarantee that the transformed page will preserve every visual or business behavior. + +## Next steps + +1. [Review the Classic pages assessment requirements](assessment-tool-classic-pages-requirements.md). +1. [Run the Classic pages assessment](assessment-tool-classic-pages-run.md). +1. [Interpret and prioritize the page results](assessment-tool-classic-pages-report.md). +1. [Review publishing-page readiness](assessment-tool-publishing-coverage.md), when applicable. +1. [Transform selected pages with PnP PowerShell](modernize-userinterface-site-pages-powershell.md). + +## Reference + +- [Classic pages assessment CSV reference](assessment-tool-classic-pages-csv.md) +- [Common assessment CSV reference](assessment-tool-common-reports.md) +- [Page transformation guidance](modernize-userinterface-site-pages.md) diff --git a/docs/transform/assessment-tool-classic-pages-csv.md b/docs/transform/assessment-tool-classic-pages-csv.md new file mode 100644 index 0000000000..31f41d3ada --- /dev/null +++ b/docs/transform/assessment-tool-classic-pages-csv.md @@ -0,0 +1,234 @@ +--- +title: Classic pages assessment CSV reference +description: Understand the page, web part, usage, web, site, and publishing CSV files generated by the Microsoft 365 Assessment tool. +ms.date: 07/27/2026 +ms.localizationpriority: high +ms.service: sharepoint +--- + +# Classic pages assessment CSV reference + +A Classic report always exports the common assessment files and the Classic component files. Files for components that weren't selected can contain only headers. + +For the common file schemas and join keys, see [Common assessment CSV reference](assessment-tool-common-reports.md). + +The page-specific output is: + +| File | Granularity | +| --- | --- | +| `classicpages.csv` | One row per discovered classic page. | +| `classicpagewebparts.csv` | One row per extracted web part. | +| `classicwebpartunique.csv` | One row per unique web part type across the assessment. | +| `classicpageauditusage.csv` | One row per page with audit activity, plus coverage-status rows when required. | +| `classicwebsummaries.csv` | One row per web. | +| `classicsitesummaries.csv` | One row per site collection. | +| `classicpublishingsitesummaries.csv` | One row per publishing portal site collection. | + +`classicpageauditusage.csv` is created only when audit collection writes rows. It isn't created when `--skipusageinformation` is used. + +## File relationship + +```text +scans.csv +|-- properties.csv +|-- history.csv +|-- sitecollections.csv +| |-- classicsitesummaries.csv +| |-- classicpublishingsitesummaries.csv +| `-- classicpageauditusage.csv * +|-- webs.csv +| |-- classicwebsummaries.csv +| `-- classicpages.csv +| `-- classicpagewebparts.csv +`-- classicwebpartunique.csv +``` + +`classicwebpartunique.csv` is scan-wide. The `*` marks site-scoped output: `classicpageauditusage.csv` isn't a strict child of `classicpages.csv`, although individual page activity rows can optionally join to assessed pages. + +## Join keys + +Use these keys when combining files: + +| Relationship | Keys | +| --- | --- | +| Page to web part | `ScanId`, `SiteUrl`, `WebUrl`, `PageUrl` | +| Audit page activity to an assessed page | `ScanId`, `SiteUrl`, `PageUrl` when the page exists in both files | +| Audit coverage row to a site | `ScanId`, `SiteUrl` | +| Page to web summary | `ScanId`, `SiteUrl`, `WebUrl` | +| Web summary to site summary | `ScanId`, `SiteUrl` | +| Publishing summary to site summary | `ScanId`, `SiteUrl` | + +`classicpageauditusage.csv` has three row shapes: + +- Page activity rows use the server-relative page URL. They join to `classicpages.csv` only when that page was included in the assessment scope. +- Standard site-level coverage rows use the server-relative site URL. These rows surface failed, skipped, empty, or partial site coverage and don't represent a page. +- An unexpected post-scan exception creates a site-level row with `QueryStatus=error` and the absolute site URL in `PageUrl`. + +Use `ScanId` and `SiteUrl` for every site-level coverage row; don't join those rows to `classicpages.csv`. + +## `classicpages.csv` + +| Column | Description | +| --- | --- | +| `ScanId` | Assessment identifier. | +| `SiteUrl` | Absolute site-collection URL. | +| `WebUrl` | Site-collection-relative web URL. `/` represents the root web. | +| `PageUrl` | Server-relative page URL. | +| `PageName` | Page title or derived file name. | +| `PageType` | `WikiPage`, `WebPartPage`, `PublishingPage`, `BlogPage`, `ASPXPage`, or `DelveBlogPage`. | +| `ListUrl` | Server-relative URL of the containing library or list. | +| `ListTitle` | Title of the containing library or list. | +| `ListId` | Identifier of the containing library or list. | +| `ModifiedAt` | Last modification time. | +| `Layout` | Detected wiki or web part layout, or publishing layout name. | +| `HomePage` | Indicates whether this page is the web's welcome page. | +| `UncustomizedHomePage` | Indicates whether the home page still matches the recognized default configuration. | +| `ModifiedBy` | Last modifier. Empty when `--skipuserinformation` is used. | +| `WebPartCount` | Number of extracted web parts. A zero can also remain when enrichment failed before extraction completed. | +| `MappingPercentage` | Rounded percentage of extracted web parts with usable mappings. A zero with `WebPartCount=0` on an enriched page can indicate an enrichment failure. | +| `UnmappedWebParts` | De-duplicated short type names for unmapped web parts. | +| `RemediationCode` | Page classification: `CP1` Web Part, `CP2` Wiki, `CP3` Publishing, `CP4` Blog, or `CP5` ASPX. It can be empty for a Delve Blog page. | + +Detailed `Layout`, `WebPartCount`, `MappingPercentage`, and `UnmappedWebParts` analysis applies to Wiki, Web Part, and Publishing pages. Don't treat default values on Blog, ASPX, or Delve Blog rows as completed mapping analysis. + +For an enriched page with no web parts, `MappingPercentage` is 100 by convention. + +If a Wiki, Web Part, or Publishing row has `WebPartCount=0` and `MappingPercentage=0`, review the assessment log for a per-page enrichment failure. + +## `classicpagewebparts.csv` + +This file contains extracted web parts from Wiki, Web Part, and Publishing pages. + +| Column | Description | +| --- | --- | +| `ScanId` | Assessment identifier. | +| `SiteUrl` | Absolute site-collection URL. | +| `WebUrl` | Site-collection-relative web URL. `/` represents the root web. | +| `PageUrl` | Server-relative page URL. | +| `WebPartIndex` | Zero-based index in the extracted page inventory. | +| `WebPartType` | Raw mapping key. It is usually an assembly-qualified type, but wiki text, image, and video parts use synthetic type values. | +| `WebPartTypeShort` | Portion of `WebPartType` before the first comma. The namespace is retained. | +| `WebPartTitle` | Configured web part title. | +| `WebPartProperties` | JSON-serialized properties when `--exportwebpartproperties` is used. | +| `ZoneId` | Web part zone identifier when available. | +| `Row` | Detected page row. | +| `Column` | Detected page column. | +| `Order` | Order within the zone or layout cell. | +| `Hidden` | Indicates whether the web part is hidden. | +| `IsClosed` | Indicates whether the web part is closed. | +| `IsMappable` | Indicates whether the embedded model contains a usable mapping. | + +## `classicwebpartunique.csv` + +This file is scan-wide. It doesn't contain `SiteUrl` or `WebUrl`. + +| Column | Description | +| --- | --- | +| `ScanId` | Assessment identifier. | +| `WebPartType` | Raw mapping key. It is usually an assembly-qualified type, but wiki content can use synthetic type values. | +| `InMappingFile` | Indicates whether the type has an entry in the embedded mapping file. | +| `PageCount` | Number of distinct pages on which the type was found. | + +`InMappingFile=true` doesn't guarantee that the entry has a usable mapping. Use `IsMappable` in `classicpagewebparts.csv` for the transformation-readiness decision. + +## `classicpageauditusage.csv` + +| Column | Description | +| --- | --- | +| `ScanId` | Assessment identifier. | +| `SiteUrl` | Absolute site-collection URL. | +| `PageUrl` | Server-relative page URL for page rows. Site-level coverage rows use the server-relative site URL, except an unexpected `error` row, which contains the absolute site URL. | +| `AuditViewsCount` | Number of `ClassicPageViewed` events. | +| `AuditCreatesCount` | Number of `ClassicPageCreated` events. | +| `AuditEditsCount` | Number of `ClassicPageEdited` events. | +| `AuditUniqueUsers` | Approximate distinct-user signal across the three operations. It saturates at 10,000; a value of 10,000 means at least 10,000 users. | +| `AuditWindowStart` | Start of the queried window in UTC. | +| `AuditWindowEnd` | End of the queried window in UTC. | +| `QueryStatus` | `succeeded`, `partial`, `failed`, `skipped`, or `error`. | +| `SkipReason` | Permission, cloud, timeout, query, or partial-data explanation when applicable. | + +The file intentionally omits `WebUrl`. Join to `classicpages.csv` by `ScanId`, `SiteUrl`, and `PageUrl`. + +If `QueryStatus=partial`, counts are a lower bound. If `QueryStatus` is `failed` or `skipped`, don't use the zero counts as activity evidence. + +An `error` row represents an unexpected post-scan exception. It is a site-level coverage row, and its `PageUrl` is currently the absolute site URL rather than a server-relative URL. + +## `classicwebsummaries.csv` + +This file is shared by Classic components. The table below documents only page-related columns. + +Page-related columns include: + +| Column | Description | +| --- | --- | +| `ScanId`, `SiteUrl`, `WebUrl` | Web identity. | +| `Template` | Web template. | +| `LastItemUserModifiedDate` | Last user modification time recorded for the web. | +| `ClassicPages` | Total discovered classic pages except `DelveBlogPage` rows. | +| `ClassicWikiPages` | Wiki page count. | +| `ClassicASPXPages` | ASPX page count. | +| `ClassicBlogPages` | Blog page count. | +| `ClassicWebPartPages` | Web Part page count. | +| `ClassicPublishingPages` | Publishing page count. | +| `ModernPages` | Modern page count. | +| `PagesWithWebParts` | Enriched classic pages with extracted web parts. | +| `MappableWebPartPages` | Pages with web parts and a mapping percentage of 100. | +| `UnmappedWebPartPages` | Pages with at least one unmapped web part. | +| `AvgMappingPercentage` | Average across pages in `PagesWithWebParts`. | +| `UncustomizedHomePages` | Recognized default home-page count. | +| `IsModernSite` | Indicates a modern site classification. | +| `IsClassicPublishingSite` | Indicates a classic publishing web. | +| `IsModernCommunicationSite` | Indicates a modern communication site. | +| `RemediationCode` | Web-level remediation classification. | +| `AggregatedRemediationCodes` | De-duplicated component remediation codes. | + +The file also contains columns for other Classic components. They are outside this page-assessment reference. + +The current page-type rollups don't include `DelveBlogPage` rows, although those rows are present in `classicpages.csv`. + +## `classicsitesummaries.csv` + +Page-related columns include: + +| Column | Description | +| --- | --- | +| `ScanId`, `SiteUrl` | Site-collection identity. | +| `LastItemUserModifiedDate` | Last user modification time recorded for the site collection. | +| `RootWebTemplate` | Root web template. | +| `SubWebTemplates` | Templates found in subwebs. | +| `SubWebCount` | Number of subwebs. | +| `SubWebDepth` | Maximum subweb depth. | +| `ClassicPages` | Total discovered classic pages except `DelveBlogPage` rows. | +| `ClassicWikiPages` | Wiki page count. | +| `ClassicASPXPages` | ASPX page count. | +| `ClassicBlogPages` | Blog page count. | +| `ClassicWebPartPages` | Web Part page count. | +| `ClassicPublishingPages` | Publishing page count. | +| `ModernPages` | Modern page count. | +| `PagesWithWebParts` | Enriched classic pages with extracted web parts. | +| `MappableWebPartPages` | Pages with web parts and a mapping percentage of 100. | +| `UnmappedWebPartPages` | Pages with at least one unmapped web part. | +| `AvgMappingPercentage` | Average across pages in `PagesWithWebParts`. | +| `UncustomizedHomePages` | Recognized default home-page count. | +| `AggregatedRemediationCodes` | De-duplicated component remediation codes. | + +The file also contains site-level columns for other Classic components. They are outside this page-assessment reference. + +The current page-type rollups don't include `DelveBlogPage` rows, although those rows are present in `classicpages.csv`. + +## `classicpublishingsitesummaries.csv` + +This file contains one row per site collection that has at least one publishing web. + +| Column | Description | +| --- | --- | +| `ScanId` | Assessment identifier. | +| `SiteUrl` | Absolute publishing portal site-collection URL. | +| `NumberOfWebs` | Number of publishing webs. | +| `NumberOfPages` | Number of classic publishing pages. | +| `UsedPageLayouts` | De-duplicated publishing page layouts. | +| `LastPageUpdateDate` | Most recent publishing-page modification time. | + +The file also contains master-page fields populated by another Classic component. They are outside this Page Assessment reference. + +For legacy publishing fields that aren't represented by this file, see [Understand publishing portal coverage](assessment-tool-publishing-coverage.md). diff --git a/docs/transform/assessment-tool-classic-pages-report.md b/docs/transform/assessment-tool-classic-pages-report.md new file mode 100644 index 0000000000..1cb876af88 --- /dev/null +++ b/docs/transform/assessment-tool-classic-pages-report.md @@ -0,0 +1,199 @@ +--- +title: Interpret the classic pages assessment report +description: Use page, web part, usage, and rollup results from the Microsoft 365 Assessment tool to plan SharePoint page modernization. +ms.date: 07/27/2026 +ms.localizationpriority: high +ms.service: sharepoint +--- + +# Interpret the classic pages assessment report + +A Classic assessment exports page-specific and shared CSV files. On Windows, the default `report` command also creates `ClassicAssessmentReport.pbit`. + +This guidance covers the **Pages** and scan-coverage views. The shared Classic template contains other component and compatibility tabs, but they are outside this page-assessment scope. + +## Validate scan coverage first + +Before interpreting page readiness, confirm that the expected scope completed: + +1. Use **Scan overview**, `scans.csv`, and `history.csv` to review assessment state and messages. +1. Use `sitecollections.csv` and `webs.csv` to identify failed, unfinished, or unusually slow locations. +1. Confirm whether the assessment used a complete tenant scope, `--siteslist`, or `--sitesfile`. +1. Review `classicpageauditusage.csv` coverage status before using activity counts. + +An assessment that finished can still contain site or web failures. Treat missing locations as a coverage gap, not as a finding that no classic content exists. + +For the common file schemas and join keys, see [Common assessment CSV reference](assessment-tool-common-reports.md). + +## Prioritize pages + +The current **Pages** Power BI tab uses the basic page inventory fields, such as page type, URL, modification date, and remediation code. + +Use `classicpages.csv` for the enriched readiness fields and to segment pages by: + +- Page type. +- Home-page status. +- Last modification date and modifier. +- Web part count. +- Mapping percentage. +- Unmapped web part types. + +Combine this inventory with `classicpageauditusage.csv` to distinguish frequently used pages from stale or low-use content. + +The current embedded Power BI model doesn't include the enriched home-page, web part, mapping, audit, or page-readiness rollup fields. Analyze those fields directly in the CSV files, or extend the Power BI model before using them in visuals. + +Audit usage is a planning signal, not a raw web analytics counter. Always check `QueryStatus`: + +| Status | Meaning | +| --- | --- | +| `succeeded` | The requested audit window completed. | +| `partial` | One or more audit subqueries failed. Counts are a lower bound. | +| `failed` | Audit collection failed. Counts aren't usable. | +| `skipped` | Audit collection wasn't run for the site, such as in an unsupported cloud. | +| `error` | An unexpected post-scan exception occurred. Review `SkipReason` and the assessment log. | + +When a site's audit query succeeded, the absence of a page row means that no matching events were returned for that page in the requested window. Treat an absent row as zero activity only after confirming successful coverage for the site. + +If `SkipReason` starts with `QueryTimeout`, Microsoft Purview didn't complete the query during Assessment's 90-minute wait. When no audit chunk succeeds, the row has `QueryStatus=failed`; treat its zero counts as failed coverage, not as evidence of no activity. This is different from `NoPermission`, which indicates a missing Audit permission. + +## Understand page-type coverage + +Wiki, Web Part, and Publishing pages receive detailed web part extraction and mapping analysis. + +Blog, ASPX, and Delve Blog pages are discovered and recorded, but don't receive the same mapping-readiness enrichment. Don't interpret a default or empty mapping value for these page types as a completed readiness analysis. + +Delve Blog pages appear in `classicpages.csv` but aren't included in the current web and site page-count rollups. + +## Interpret mapping results + +`MappingPercentage` is the percentage of extracted web parts that have a usable mapping in the embedded mapping model: + +- A page with no extracted web parts is 100 percent by convention. +- A 100-percent result means that all extracted web part types have mappings. It doesn't guarantee visual, data, permission, or business-behavior parity after transformation. +- A value below 100 with `WebPartCount` greater than zero identifies one or more web part types that require remediation, replacement, or a custom mapping. +- For a Wiki, Web Part, or Publishing page, `WebPartCount=0` and `MappingPercentage=0` can indicate that extraction failed before the mapping calculation ran. Review the assessment log for `Failed to assess the web parts of classic page`. + +Use `classicpagewebparts.csv` for the per-page decision: + +- `IsMappable` means that the web part has a nonempty usable mapping. +- `WebPartProperties` is populated only when `--exportwebpartproperties` was selected. +- Row, column, zone, order, hidden, and closed values help explain the current page layout. + +Use `classicwebpartunique.csv` to identify web part types that affect many pages. `InMappingFile` is weaker than `IsMappable`: it only means that the type has an entry in the mapping file. + +The current Assessment implementation deliberately treats the community mappings for `ScriptEditorWebPart` and `SimpleFormWebPart` as unavailable. It also doesn't support the legacy Scanner's on-disk mapping-file override. + +## Use rollups + +Use `classicwebsummaries.csv` and `classicsitesummaries.csv` to identify: + +- Webs and site collections with the most classic pages. +- Pages with fully mappable or unmapped web parts. +- Average mapping percentage across pages that contain web parts. +- Default home pages that can be replaced as an early modernization wave. + +Rollups are useful for sequencing, but return to the page and web part CSV files before making a remediation decision. + +## Review publishing portals + +`classicpublishingsitesummaries.csv` provides a site-collection-level publishing summary. Detailed legacy web-level publishing configuration isn't included. + +See [Understand publishing portal coverage](assessment-tool-publishing-coverage.md) before replacing an established Publishing Scanner workflow. + +## Move from assessment to transformation + +Turn the report into a transformation backlog: + +1. Exclude failed or incomplete scan locations. +1. Prioritize active pages and important home pages. +1. Group pages by page type, layout, and unmapped Web Part combination. +1. Resolve common blockers before transforming a large wave. +1. Map the CSV page identity to the PnP PowerShell source connection and cmdlet parameters. +1. Transform a representative sample and validate the result before scaling out. + +### Map CSV fields to PnP PowerShell + +| CSV field | Transformation use | +| --- | --- | +| `SiteUrl` + `WebUrl` | Build the source web URL for `Connect-PnPOnline`. | +| `PageUrl` + `ListUrl` | Derive the page file name, containing library, and optional folder. | +| `PageName` | Use the page title as `-Identity` for a classic Blog page. | +| `PageType` | Route to the Wiki/Web Part, Publishing, or Blog transformation path. | +| `Layout` | Select or validate page-layout mapping for publishing pages. | + +The Assessment app is read-only. Use a separate PnP PowerShell connection with permission to create or update pages in the source or target web. + +### Transform one selected Wiki or Web Part page + +This example selects one assessed page and transforms it in place. Filter on the exact `PageUrl` that you approved for the migration wave. + +```powershell +$row = Import-Csv .\classicpages.csv | + Where-Object PageUrl -eq '/sites/source/SitePages/ApprovedPage.aspx' | + Select-Object -First 1 + +if ($row.PageType -notin @('WikiPage', 'WebPartPage')) { + throw "This example only handles WikiPage and WebPartPage rows." +} + +$sourceWebUrl = if ($row.WebUrl -eq '/') { + $row.SiteUrl +} +else { + "$($row.SiteUrl.TrimEnd('/'))$($row.WebUrl)" +} + +$source = Connect-PnPOnline ` + -Url $sourceWebUrl ` + -Interactive ` + -ClientId ` + -ReturnConnection + +$libraryPath = $row.ListUrl.TrimEnd('/') +if (-not $row.PageUrl.StartsWith("$libraryPath/", [StringComparison]::OrdinalIgnoreCase)) { + throw "PageUrl isn't under ListUrl." +} + +$pageRelativeToLibrary = $row.PageUrl.Substring($libraryPath.Length).TrimStart('/') +$pageName = [IO.Path]::GetFileName($pageRelativeToLibrary) +$folder = [IO.Path]::GetDirectoryName($pageRelativeToLibrary) -replace '\\', '/' +$libraryName = [Uri]::UnescapeDataString([IO.Path]::GetFileName($libraryPath)) + +$parameters = @{ + Identity = $pageName + Connection = $source +} + +if ($libraryName -ne 'SitePages') { + $parameters.Library = $libraryName +} +if (-not [string]::IsNullOrWhiteSpace($folder)) { + $parameters.Folder = $folder +} + +ConvertTo-PnPPage @parameters +``` + +Route other page types deliberately: + +- `PublishingPage`: use `-PublishingPage`, a target web, and the [publishing page-layout model](modernize-userinterface-site-pages-model-publishing.md). +- `BlogPage`: use `-BlogPage`, `PageName` as the blog-title identity, and a target web. Blog rows don't receive the detailed mapping-readiness enrichment described for Wiki, Web Part, and Publishing pages. +- `ASPXPage` and `DelveBlogPage`: exclude them from this automated transformation queue; the page assessment doesn't provide an equivalent readiness path for them. + +Start with [Transform classic pages with PnP PowerShell](modernize-userinterface-site-pages-powershell.md). Use the [page transformation model](modernize-userinterface-site-pages-model.md) for custom Web Part mappings and the [publishing model](modernize-userinterface-site-pages-model-publishing.md) for publishing page layouts. + +## Power BI and CSV + +The Power BI template is a visualization layer over the CSV output. The CSV files remain the source for: + +- Automation. +- Schema-level validation. +- Joining page, web part, usage, web, and site records. +- Retaining a reviewable evidence snapshot. + +Power BI template generation requires Windows. CSV generation works on Windows, macOS, and Linux. + +## Reference + +- [Classic pages assessment CSV reference](assessment-tool-classic-pages-csv.md) +- [Common assessment CSV reference](assessment-tool-common-reports.md) diff --git a/docs/transform/assessment-tool-classic-pages-requirements.md b/docs/transform/assessment-tool-classic-pages-requirements.md new file mode 100644 index 0000000000..06e33b4879 --- /dev/null +++ b/docs/transform/assessment-tool-classic-pages-requirements.md @@ -0,0 +1,108 @@ +--- +title: Requirements for the classic pages assessment +description: Configure authentication, permissions, audit access, and a supported environment for the Microsoft 365 Assessment tool classic pages component. +ms.date: 07/27/2026 +ms.localizationpriority: high +ms.service: sharepoint +--- + +# Requirements for the classic pages assessment + +The classic pages component assesses SharePoint Online. It doesn't assess SharePoint Server or another on-premises source. + +Download the latest [Microsoft 365 Assessment tool release](https://github.com/pnp/pnpassessment/releases). Core classic page readiness analysis is available in version 1.15.0 and later. The Microsoft Graph audit usage flow, `--auditlogwindowdays`, and `classicpageauditusage.csv` contract documented in this guidance require version 1.16.0 or later. + +Configure `appsettings.json` for tenants in GCC High, DoD, or [Microsoft 365 operated by 21Vianet](/office365/servicedescriptions/office-365-platform-service-description/microsoft-365-operated-by-21vianet), and for tenants that use custom SharePoint URLs (vanity URLs). See [Assessment tool configuration](https://pnp.github.io/pnpassessment/using-the-assessment-tool/configuration.html). + +## Authentication + +The tool supports the following authentication modes: + +| Mode | Permission type | Recommended use | +| --- | --- | --- | +| `Application` | Application permissions and a certificate | Full-tenant and unattended assessments. | +| `Interactive` | Delegated permissions | A limited scope on Windows or macOS. | +| `Device` | Delegated permissions | A limited scope on Linux or another device-code scenario. | + +Application authentication is recommended for a full-tenant assessment. A delegated assessment can access only the sites that the signed-in account can access. + +For general application-registration steps, see [Configure authentication](https://pnp.github.io/pnpassessment/using-the-assessment-tool/setupauth.html). + +### Application certificate + +Application authentication requires a certificate associated with the Microsoft Entra application. Upload the public certificate to the app registration, and make sure that the account running the assessment can access the matching private key. + +The application-authentication examples use a certificate in the current user's **Personal** certificate store: + +```console +--certpath "My|CurrentUser|" +``` + +In this value, `My` identifies the Personal certificate store, `CurrentUser` identifies the account running the assessment, and the final value is the certificate thumbprint. The [authentication setup guidance](https://pnp.github.io/pnpassessment/using-the-assessment-tool/setupauth.html) explains how to create the certificate, add it to the app registration, and find its thumbprint. + +## Permissions + +The current classic pages implementation requires the following permissions: + +| Authentication | Microsoft Graph | SharePoint | +| --- | --- | --- | +| Application | `Sites.Read.All` application permission | `Sites.Read.All` application permission | +| Interactive or Device | `Sites.Read.All` and `User.Read` delegated permissions | `AllSites.Read` delegated permission | + +The page inventory reads web part configuration through the SharePoint `LimitedWebPartManager` API. Assessment version 1.16.0 can complete page and web part extraction with the read permissions in this table. + +Grant admin consent for the configured permissions before starting the assessment. + +## Audit usage permission + +Unless you specify `--skipusageinformation`, the assessment queries Microsoft Graph for `ClassicPageViewed`, `ClassicPageCreated`, and `ClassicPageEdited` audit events. + +Add `AuditLogsQuery-SharePoint.Read.All` in the permission type used by the authentication mode: + +| Authentication | Additional Microsoft Graph permission | +| --- | --- | +| Application | `AuditLogsQuery-SharePoint.Read.All` application permission | +| Interactive or Device | `AuditLogsQuery-SharePoint.Read.All` delegated permission | + +Grant admin consent. For delegated authentication, the signed-in account must also be authorized to search Audit data in Microsoft Purview. + +If the permission is missing, page discovery and web part analysis can still finish. Audit rows are marked `failed`, and `SkipReason` explains the missing permission. + +## Audit availability + +- Verify that Microsoft Purview Audit is available and recording activity for the tenant. +- Unified Audit ingestion is enabled by default for most organizations. Verify `UnifiedAuditLogIngestionEnabled`; when it is `False`, enable it before running the query. Organization customization might need to be enabled first, and the change can take up to 60 minutes to propagate. +- If Audit is disabled or Microsoft Purview reports **Microsoft 365 - Not connected**, open the **Audit** solution, select **Get started**, and wait for **Setting up apps** to finish. The ingestion property can be `True` while Microsoft 365 is still being connected to the Purview Audit backend. +- The administrative property can return `True` before the Graph Audit Query backend is ready. HTTP 400 with backend status `AuditingDisabledTenant` can indicate tenant-level provisioning or propagation; verify both ingestion and the Purview connection state before treating it as a permission failure. +- New events can take approximately 60 to 90 minutes to become available. After auditing is first enabled for an organization, events can take several hours to become searchable. +- `--auditlogwindowdays` accepts a value from 1 through 180. The default is 14. +- The Microsoft Graph audit query API used by the tool is available only in the global service. The current tool records audit collection as `skipped` in sovereign-cloud environments. + +Use `--skipusageinformation` when audit data isn't required or isn't available. In that case, `classicpageauditusage.csv` isn't generated. + +## Report platform + +CSV report generation is supported on Windows, macOS, and Linux. Power BI template generation requires Windows. + +To create a Power BI template for an assessment that ran on macOS or Linux, copy the complete assessment-ID folder to the Windows installation directory of the same tool version, and then run the `report` command on Windows. + +## Data handling + +Assessment output can contain tenant and site URLs, application identifiers, user information, audit activity, web part titles, and web part configuration. + +- Use `--skipuserinformation` when the page modifier isn't required. +- Enable `--exportwebpartproperties` only when the configuration details are needed. +- Review and sanitize CSV files before sharing them outside the assessment team. +- Never include certificates, tokens, passwords, or unredacted authentication material with shared report output. + +## Next steps + +1. [Run a classic pages assessment](assessment-tool-classic-pages-run.md). +1. [Interpret and prioritize the classic page results](assessment-tool-classic-pages-report.md). +1. [Review publishing-page readiness](assessment-tool-publishing-coverage.md), when applicable. +1. [Transform selected pages with PnP PowerShell](modernize-userinterface-site-pages-powershell.md). + +## Reference + +- [Classic pages assessment CSV reference](assessment-tool-classic-pages-csv.md) +- [Common assessment CSV reference](assessment-tool-common-reports.md) diff --git a/docs/transform/assessment-tool-classic-pages-run.md b/docs/transform/assessment-tool-classic-pages-run.md new file mode 100644 index 0000000000..c59b874314 --- /dev/null +++ b/docs/transform/assessment-tool-classic-pages-run.md @@ -0,0 +1,146 @@ +--- +title: Run a classic pages assessment +description: Start, scope, monitor, and report a Microsoft 365 Assessment tool classic pages assessment. +ms.date: 07/27/2026 +ms.localizationpriority: high +ms.service: sharepoint +--- + +# Run a classic pages assessment + +Run the classic pages assessment with `--mode Classic --classicinclude Pages`. + +Before you start, complete the [classic pages requirements](assessment-tool-classic-pages-requirements.md). + +## Page modernization workflow + +[!INCLUDE [classic-page-modernization-workflow](../../includes/snippets/assessment/classic-page-modernization-workflow.md)] + +## Assess the complete tenant + +Application authentication is recommended for a full-tenant assessment: + +Before running the command, configure the [application certificate](assessment-tool-classic-pages-requirements.md#application-certificate). + +```powershell +microsoft365-assessment.exe start --mode Classic --classicinclude Pages ` + --authmode application ` + --tenant .sharepoint.com ` + --applicationid ` + --certpath "My|CurrentUser|" +``` + +The `--tenant` value is the SharePoint host name without `https://`. + +## Assess selected site collections + +Use `--siteslist` for a short comma-separated list: + +```powershell +microsoft365-assessment.exe start --mode Classic --classicinclude Pages ` + --skipusageinformation ` + --authmode interactive ` + --tenant .sharepoint.com ` + --applicationid ` + --siteslist "https://.sharepoint.com/sites/site1,https://.sharepoint.com/sites/site2" +``` + +Use `--sitesfile` for a larger scope: + +```powershell +microsoft365-assessment.exe start --mode Classic --classicinclude Pages ` + --authmode application ` + --tenant .sharepoint.com ` + --applicationid ` + --certpath "My|CurrentUser|" ` + --sitesfile "C:\assessment\sites.txt" +``` + +The sites file contains one absolute site-collection URL per line. Don't combine `--siteslist` and `--sitesfile`. + +## Page-specific options + +| Option | Effect | +| --- | --- | +| `--exportwebpartproperties` | Adds serialized web part properties to `classicpagewebparts.csv`. | +| `--skipusageinformation` | Skips Microsoft Graph audit usage collection and doesn't generate `classicpageauditusage.csv`. | +| `--auditlogwindowdays <1-180>` | Sets the audit window. The default is 14 days. | +| `--skipuserinformation` | Omits page modifier information. | +| `--homepageonly` | Filters the page inventory to the home page of each web. It doesn't filter site-scoped Audit results. | +| `--threads ` | Changes parallelism. Start with 4 to 8 threads when throttling is a concern. | + +For example, assess only home pages, export web part properties, and skip audit usage: + +```powershell +microsoft365-assessment.exe start --mode Classic --classicinclude Pages ` + --homepageonly ` + --exportwebpartproperties ` + --skipusageinformation ` + --authmode application ` + --tenant .sharepoint.com ` + --applicationid ` + --certpath "My|CurrentUser|" +``` + +## Scope considerations + +- For a tenant that uses custom SharePoint URLs (vanity URLs), configure both `AdminCenterUrl` and `MySiteHostUrl` in `appsettings.json`, and provide `--siteslist` or `--sitesfile`. See [Assessment tool configuration](https://pnp.github.io/pnpassessment/using-the-assessment-tool/configuration.html). +- For a Multi-Geo tenant, run a separate assessment for each geo. Use the primary tenant host in `--tenant` and provide the geo's site collections with `--siteslist` or `--sitesfile`. +- Run a small representative scope first to validate authentication, output, audit access, and scan duration. +- The tool supports up to three parallel assessments, but parallel scans increase the risk of throttling. + +## Monitor and control the assessment + +List available assessments: + +```console +microsoft365-assessment.exe list +``` + +Show continuously refreshed status: + +```console +microsoft365-assessment.exe status +``` + +Pause and restart an assessment: + +```console +microsoft365-assessment.exe pause --id +microsoft365-assessment.exe restart --id +``` + +The assessment ID is also the name of the local data folder. Review the log in that folder if progress stops changing. + +After site processing finishes, `status` can show `Finalizing` while post-scan work runs. Assessment waits up to 90 minutes for each page Audit query. A query can remain `notStarted` or `running` during that wait. If no audit chunk succeeds before the wait expires, `classicpageauditusage.csv` records `QueryStatus=failed` and a `SkipReason` that starts with `QueryTimeout`. Review `[AuditLog]` entries in the assessment log before treating `Finalizing` as a hang. + +## Generate report output + +Generate CSV files and, on Windows, the Power BI template: + +```console +microsoft365-assessment.exe report --id +``` + +The assessment must be `Finished` or intentionally `Paused` before a report can be generated. The tool rejects report requests for assessments that are still running or finalizing. + +Generate only CSV files in a custom location: + +```console +microsoft365-assessment.exe report --id --mode CsvOnly --path "C:\reports" +``` + +By default, output is written to the `report` subfolder under the assessment-ID folder. + +Use `--delimiter Semicolon` when a semicolon-delimited export is required. Use `--open false` to prevent the generated report from opening automatically. + +## Next steps + +1. [Interpret and prioritize the classic page results](assessment-tool-classic-pages-report.md). +1. [Review publishing-page readiness](assessment-tool-publishing-coverage.md), when applicable. +1. [Transform selected pages with PnP PowerShell](modernize-userinterface-site-pages-powershell.md). + +## Reference + +- [Classic pages assessment CSV reference](assessment-tool-classic-pages-csv.md) +- [Common assessment CSV reference](assessment-tool-common-reports.md) diff --git a/docs/transform/assessment-tool-classic-pages.md b/docs/transform/assessment-tool-classic-pages.md new file mode 100644 index 0000000000..fbfa78bc3a --- /dev/null +++ b/docs/transform/assessment-tool-classic-pages.md @@ -0,0 +1,103 @@ +--- +title: Assess classic SharePoint pages +description: Discover classic pages, inventory their web parts, and measure page modernization readiness. +ms.date: 07/27/2026 +ms.localizationpriority: high +ms.service: sharepoint +--- + +# Assess classic SharePoint pages + +Use the Classic pages component of the Microsoft 365 Assessment tool to discover classic wiki, web part, publishing, blog, ASPX, and Delve Blog pages in SharePoint Online. + +Wiki, Web Part, and Publishing pages receive detailed Web Part inventory, layout, home-page, and mapping-readiness enrichment. Blog, ASPX, and Delve Blog pages are discovered and recorded, but they don't receive the same Web Part mapping readiness analysis. + +The assessment can optionally collect page view/create/edit activity from the Microsoft Graph audit log. + +In the current implementation, Delve Blog pages appear in `classicpages.csv` but aren't included in `ClassicPages` or the page-type counts in `classicwebsummaries.csv` and `classicsitesummaries.csv`. + +## In this guidance + +### Workflow + +1. [Review the requirements](assessment-tool-classic-pages-requirements.md). +1. [Run the assessment](assessment-tool-classic-pages-run.md). +1. [Interpret and prioritize the results](assessment-tool-classic-pages-report.md). +1. [Review publishing-page readiness](assessment-tool-publishing-coverage.md), when applicable. +1. [Transform selected pages with PnP PowerShell](modernize-userinterface-site-pages-powershell.md). + +### Reference + +- [Classic pages assessment CSV reference](assessment-tool-classic-pages-csv.md) +- [Common assessment CSV reference](assessment-tool-common-reports.md) + +## Run the assessment + +Before running the application-authentication example, configure the [application certificate](assessment-tool-classic-pages-requirements.md#application-certificate). + +```powershell +microsoft365-assessment.exe start --mode Classic --classicinclude Pages ` + --authmode application ` + --tenant .sharepoint.com ` + --applicationid ` + --certpath "My|CurrentUser|" +``` + +Page-specific options: + +| Option | Purpose | +| --- | --- | +| `--exportwebpartproperties` | Exports Web Part properties as JSON. | +| `--skipusageinformation` | Skips audit log usage collection. | +| `--auditlogwindowdays` | Sets the audit window from 1 through 180 days. The default is 14. | +| `--skipuserinformation` | Omits user information such as Modified By. | +| `--homepageonly` | Assesses only the home page of each Web. | + +For authentication, SharePoint access, audit permissions, platform support, and sensitive-output guidance, see [Requirements for the classic pages assessment](assessment-tool-classic-pages-requirements.md). + +## Output + +| File | Content | +| --- | --- | +| `classicpages.csv` | One row per classic page, including page type, layout, home-page flags, mapping percentage, and unmapped Web Parts. | +| `classicpagewebparts.csv` | One row per Web Part found on a classic page. | +| `classicwebpartunique.csv` | One row per unique Web Part type across the assessment. | +| `classicpageauditusage.csv` | Page view/create/edit activity when audit collection runs. | +| `classicwebsummaries.csv` | Per-Web page counts and readiness rollups. | +| `classicsitesummaries.csv` | Per-site-collection page counts and readiness rollups. | +| `classicpublishingsitesummaries.csv` | Publishing Portal site-level summary. | + +The Power BI template includes a **Pages** report tab and shared summary/scan-overview tabs. + +For schemas and join keys, see [Classic pages CSV reference](assessment-tool-classic-pages-csv.md). + +## Understand mapping results + +For Wiki, Web Part, and Publishing pages, `MappingPercentage` measures whether each Web Part has a usable mapping in the embedded mapping model. It doesn't guarantee that the transformed page will preserve all visual or business behavior. + +For Blog, ASPX, and Delve Blog pages, don't interpret default or empty Web Part readiness values as a completed mapping analysis. + +For an enriched page, `WebPartCount=0` and `MappingPercentage=100` means that no Web Parts were extracted. `WebPartCount=0` and `MappingPercentage=0` can indicate that page enrichment failed; review the assessment log for that page. + +`InMappingFile` in `classicwebpartunique.csv` only indicates that a Web Part type is present in the mapping file. Use `IsMappable` in `classicpagewebparts.csv` and the per-page mapping percentage to determine whether a usable mapping was found. + +For a complete interpretation workflow, see [Interpret the classic pages assessment report](assessment-tool-classic-pages-report.md). + +## Continue to page transformation + +Use the assessment output to select pages and identify Web Parts that need remediation. A high mapping percentage helps prioritize work, but it doesn't transform the page. + +1. Review `classicpages.csv` and `classicpagewebparts.csv`. +1. Remove, replace, or map blocking Web Parts. +1. Start with a small representative wave. +1. [Transform the selected pages with PnP PowerShell](modernize-userinterface-site-pages-powershell.md). +1. Validate the generated modern pages before expanding the wave. + +For the complete transformation model and advanced mapping options, see [Transform classic pages to modern pages](modernize-userinterface-site-pages.md). + +## Additional open-source documentation + +- [Classic SharePoint Pages Assessment](https://pnp.github.io/pnpassessment/classic/readme.html) +- [Open-source requirements page](https://pnp.github.io/pnpassessment/classic/requirements.html). That project page still lists FullControl and only the application Audit permission; use the [Learn requirements](assessment-tool-classic-pages-requirements.md) for the Assessment 1.16.0 permission profile. +- [Run an assessment](https://pnp.github.io/pnpassessment/classic/assess.html) +- [Open-source Power BI report page](https://pnp.github.io/pnpassessment/classic/report-intro.html). That project page describes intended readiness visuals; use the [Learn report guide](assessment-tool-classic-pages-report.md) for the fields available in the current embedded template. diff --git a/docs/transform/assessment-tool-common-reports.md b/docs/transform/assessment-tool-common-reports.md new file mode 100644 index 0000000000..c0b3fa0177 --- /dev/null +++ b/docs/transform/assessment-tool-common-reports.md @@ -0,0 +1,128 @@ +--- +title: Common CSV reference for a classic pages assessment +description: Reference the common scan, property, history, site collection, and web files generated by a Classic Pages assessment. +ms.date: 07/27/2026 +ms.localizationpriority: high +ms.service: sharepoint +--- + +# Common CSV reference for a classic pages assessment + +A Classic pages report also exports these common files: + +```text +scans.csv +properties.csv +history.csv +sitecollections.csv +webs.csv +``` + +Use the common files to validate scope and coverage before interpreting a module-specific finding. + +## Join keys + +| Relationship | Keys | +| --- | --- | +| Assessment to any output | `ScanId` | +| Assessment to site collection | `ScanId`, `SiteUrl` | +| Assessment to web | `ScanId`, `SiteUrl`, `WebUrl` | + +## `scans.csv` + +This file contains one row for the assessment. + +| Column | Description | +| --- | --- | +| `ScanId` | Assessment identifier. | +| `StartDate` | First start time. | +| `EndDate` | Completion, pause, or termination time when available. | +| `Status` | `Queued`, `Running`, `Pausing`, `Paused`, `Finished`, or `Terminated`. | +| `PreScanStatus` | Status of component-specific pre-assessment work. | +| `PostScanStatus` | Status of the post-scan processing phase. | +| `Version` | Assessment tool version. | +| `CLIMode` | Selected assessment mode. | +| `CLITenant` | SharePoint tenant host supplied to the CLI. | +| `CLITenantId` | Microsoft Entra tenant identifier when recorded. | +| `CLIEnvironment` | Selected Microsoft 365 cloud environment. | +| `CLISiteList` | Site list supplied directly to the CLI. | +| `CLISiteFile` | Site-list file path supplied to the CLI. | +| `CLIAuthMode` | Application, Interactive, or Device authentication. | +| `CLIApplicationId` | Entra application identifier. | +| `CLICertPath` | Certificate-store path supplied to the CLI. | +| `CLICertFile` | Certificate-file path supplied to the CLI. | +| `CLICertFilePassword` | Locally protected certificate password value when one was supplied. | +| `CLIThreads` | Configured parallel operation count. | + +> [!CAUTION] +> Treat `scans.csv` as sensitive operational data. It can disclose tenant identifiers, application identifiers, site scope, local paths, and protected authentication configuration. Don't publish it without review and sanitization. + +## `properties.csv` + +This file contains persisted assessment options. + +| Column | Description | +| --- | --- | +| `ScanId` | Assessment identifier. | +| `Name` | Option or property name. | +| `Type` | Stored value type. | +| `Value` | Stored option value. | + +Use this file to verify component selection and module-specific options, such as page scan flags. + +## `history.csv` + +This file contains assessment lifecycle events and messages. + +| Column | Description | +| --- | --- | +| `ScanId` | Assessment identifier. | +| `Id` | Local event identifier. | +| `Event` | Event category. | +| `EventDate` | Event time. | +| `Message` | Operational message. | + +Use `history.csv` together with the assessment log when report coverage or lifecycle state is unclear. + +## `sitecollections.csv` + +This file contains one row per site collection in scope. + +| Column | Description | +| --- | --- | +| `ScanId` | Assessment identifier. | +| `SiteUrl` | Absolute site-collection URL. | +| `StartDate` | Site-collection processing start time. | +| `EndDate` | Site-collection processing end time. | +| `ScanDuration` | Processing duration recorded by the tool. | +| `Status` | `Queued`, `Running`, `Finished`, or `Failed`. | + +The internal error and stack-trace properties aren't exported to this CSV. Use the assessment log and `history.csv` for failure details. + +## `webs.csv` + +This file contains one row per discovered web queued for processing. Use `Status` to determine whether processing started or finished. + +| Column | Description | +| --- | --- | +| `ScanId` | Assessment identifier. | +| `SiteUrl` | Absolute site-collection URL. | +| `WebUrl` | Site-collection-relative web URL. `/` represents the root web. | +| `WebUrlAbsolute` | Absolute web URL. | +| `StartDate` | Web processing start time. | +| `EndDate` | Web processing end time. | +| `ScanDuration` | Processing duration recorded by the tool. | +| `Status` | `Queued`, `Running`, `Finished`, or `Failed`. | +| `Template` | Web template. | + +The internal error and stack-trace properties aren't exported to this CSV. + +## Validate coverage + +1. Confirm the assessment row and expected mode in `scans.csv`. +1. Confirm component options in `properties.csv`. +1. Identify failed or unfinished site collections and webs. +1. Review `history.csv` and the local log for failure details. +1. Only then interpret module-specific counts and findings. + +For page-specific fields and joins, see [Classic pages assessment CSV reference](assessment-tool-classic-pages-csv.md). diff --git a/docs/transform/assessment-tool-publishing-coverage.md b/docs/transform/assessment-tool-publishing-coverage.md new file mode 100644 index 0000000000..279cdd2334 --- /dev/null +++ b/docs/transform/assessment-tool-publishing-coverage.md @@ -0,0 +1,90 @@ +--- +title: Assess publishing pages for transformation +description: Use Microsoft 365 Assessment tool publishing-page output to plan page transformation and page-layout mapping. +ms.date: 07/27/2026 +ms.localizationpriority: high +ms.service: sharepoint +--- + +# Assess publishing pages for transformation + +The Microsoft 365 Assessment tool provides page-level publishing readiness and a site-collection-level publishing-page summary. Use these results to size publishing transformation work and identify layouts or Web Parts that require custom mappings. + +## Before you begin + +- Complete the [Classic Pages requirements](assessment-tool-classic-pages-requirements.md). +- Run the Pages component to populate publishing-page readiness, page layouts, and Web Part inventory. +- The following command skips page Audit usage. Remove `--skipusageinformation` only after configuring the documented Audit application permission. + +## Run the required components + +The example uses the Windows executable name. On macOS or Linux, use `./microsoft365-assessment`. + +```powershell +microsoft365-assessment.exe start --mode Classic ` + --classicinclude Pages ` + --skipusageinformation ` + --authmode application ` + --tenant .sharepoint.com ` + --applicationid ` + --certpath "My|CurrentUser|" +``` + +## Site-collection summary + +Use these page-related fields in `classicpublishingsitesummaries.csv`: + +- Publishing web count. +- Publishing page count. +- Used page layouts. +- Latest publishing-page modification date. + +Use this file to identify large or stale publishing portals. + +## Page-level coverage + +Assessment provides: + +- Page URL, name, type, library, layout, modification time, and modifier. +- Home-page classification. +- Normalized one-row-per-web-part inventory. +- Mapping percentage and unmapped web part types. +- Optional page view/create/edit audit activity. + +The current page assessment doesn't provide these publishing transformation inputs: + +- Content type name and ID. +- Page layout file and whether the layout was customized. +- Global, security-group, and SharePoint-group audience values. +- Master-page, alternate-CSS, navigation, approval, versioning, scheduling, variation, audience, and ownership configuration. + +These areas are outside the Page Assessment scope. The lifecycle of legacy Scanner reports is handled separately from this guidance. + +## Continue to publishing-page transformation + +1. Group publishing pages by `Layout`. +1. Review `MappingPercentage` and `UnmappedWebParts`. +1. Identify custom layouts that need a page-layout mapping. +1. Validate representative pages before processing a complete portal. + +For an out-of-the-box publishing layout, use the built-in layout mapping where possible: + +```powershell +Connect-PnPOnline -Url https://contoso.sharepoint.com/sites/source -Interactive -ClientId + +ConvertTo-PnPPage ` + -PublishingPage ` + -Identity Article.aspx ` + -TargetWebUrl https://contoso.sharepoint.com/sites/target +``` + +For a custom publishing layout, generate and review a mapping before transformation: + +```powershell +Export-PnPPageMapping -CustomPageLayoutMapping -Folder C:\temp +``` + +## Reference + +- [Classic pages assessment CSV reference](assessment-tool-classic-pages-csv.md) +- [Publishing Page transformation model](modernize-userinterface-site-pages-model-publishing.md) diff --git a/includes/snippets/assessment/classic-page-modernization-workflow.md b/includes/snippets/assessment/classic-page-modernization-workflow.md new file mode 100644 index 0000000000..97f062cdfc --- /dev/null +++ b/includes/snippets/assessment/classic-page-modernization-workflow.md @@ -0,0 +1,6 @@ +1. Configure and run the Classic pages assessment. +1. Validate site, web, and Audit coverage. +1. Interpret and prioritize the page results. +1. Remediate or map blocking Web Parts. +1. Transform selected pages with PnP PowerShell. +1. Validate the modern pages and expand the migration wave.