Office 365 Notification MC197403 published on December 4, 2019 brings the sad news that Microsoft is retiring Delve blogs. Rumors (and some customer communications from Microsoft) had given a heads-up about what might happen, but nothing’s confirmed until you see it in writing. Beginning January 18, 2020, you won’t be able to create new Delve blogs, and on February 18, 2020 no one will be able to create or edit posts for existing blogs. Microsoft will then complete the deprecation by removing all Delve blogs beginning on July 17, 2020. Possibly more important to more tenants, Microsoft is also deprecating SharePoint classic blogs from January 18, 2020.
The demise of Delve blogs doesn’t mean that Delve itself is going away; it’s just the removal of a small and somewhat inconsequential part of the app. Even with all the hype around Project Cortex at the recent Microsoft Ignite conference, you’ve got to remember that Microsoft has positioned Cortex as an Office 365 E5 feature (or an add-on), while Delve is available to Office 365 E3 accounts.
The Origin of Delve Blogs
Microsoft announced the Delve app (code name Oslo) was at the 2014 SharePoint Conference). Delve first appeared in customer Office 365 tenants in early 2015. The blogs feature is linked with the “next generation portal” initiative launched by Microsoft in 2015. Office 365 Video (now being replaced by Stream) is the only one of the next generation portals that made it into production. A Knowledge Management portal generated a lot of excitement when it was shown at the Microsoft Ignite conference in May 2015, but never saw the light of day. It’s hard to remember the detail at this point (Ignite sessions were not all recorded as they are today), but my recollection is that Microsoft positioned Delve blogs as a way for end users to compose articles for internal consumption that would feed into the KM portal.
Quite why blog creation was tied to Delve is unknown. Delve has always been about consuming and finding content, so putting a blog section at the end of the Delve profile (Figure 1) was an odd choice. It seems like putting the choice on the SharePoint home page would have been a better option.
Figure 1: Access to blogs is part of the Delve user interface
Delve Blog Posts
Blog posts are created on a canvas composed of multiple parts (text, graphics, embedded documents, etc.) much like you create SharePoint news items (Figure 2). In some respects, the editing experience is like putting together a blog post using a very basic version of the WordPress Gutenberg editor without its features. Text formatting is basic and no spell checking is available. Most of the time, I would compose text in Word and paste it into a blog, just like I do for SharePoint news items today. When a post is ready, you publish the post to make it visible to others.
Figure 2: Writing a Delve blog post
New blog posts turn up in users’ Delve feeds and can be accessed using a URL just like any other SharePoint page (see below). Originally, Microsoft talked about posts forming a user’s magazine, with the idea that readers would go from post to post just like you’d browse articles in a paper magazine. Things didn’t work out quite that way.
The SharePoint Side of Delve Blogs
Everyone who wrote Delve blogs had a micro-site stored in SharePoint Online in a special publishing site with a URL like:
SharePoint provisions a site for a user the first time they create a blog post.
Each blog is assigned a number and is represented as an item in a list in the Pages library and has a content type of “Story Page.” This item holds a blob of JSON data that holds the metadata for the post. Any images used in posts are held in folders in the Images library. When someone wants to view the content of a post, the components are extracted from the various libraries and assembled for display in a single page app. The same page as referred to above is used to display all posts with the story number used to name the content to be displayed. Thus, my second blog post can be referenced with a URL like:
We shouldn’t worry about the removal of Delve blogs. It’s a part of Office 365 that was set up for failure because Microsoft never did the work to improve the authoring and publication process to make Delve blogs any way comparable to blogs published on commercial platforms like WordPress. Once Microsoft displayed their lack of interest in developing the blog platform after the cancellation of the next generation portal project in 2016, it was only a matter of time before Delve blogs received a bullet.
Finding Delve Blogs
You might not know if anyone uses Delve blogs in your tenant. To check, you can run this PowerShell script. The code uses cmdlets in the SharePoint Online and PnP modules. You can install the PnP module from the PowerShell gallery by running the command:
Install-Module SharePointPnPPowerShellOnline
# Script to find out what Delve blogs exist in an Office 365 tenant
# Uses the SharePoint Online and PnP PowerShell modules.
$Sites = Get-SPOSite -Template POINTPUBLISHINGPERSONAL#0
$Report = [System.Collections.Generic.List[Object]]::new() # Create output file for report
# Loop down through each Delve blog site to extract details
ForEach ($Site in $Sites) {
Connect-PnpOnline $Site.Url -Credentials $O365Cred
$DelveBlogs = Get-PnpList -Identity "Pages"
$BlogCount = $DelveBlogs.ItemCount
$BlogLastUpdate = $DelveBlogs.LastItemUserModifiedDate
$BlogAuthors = Get-PnPGroupMembers -Identity Contributors | Select Email, Title
$ReportLine = [PSCustomObject] @{
BlogSite = $Site.URL
BlogPageCount = $BlogCount
BlogAuthor = $BlogAuthors.Title
BlogEmail = $BlogAuthors.Email
Modified = Get-Date($BlogLastUpdate) -format g}
$Report.Add($ReportLine) }
$Report | Export-CSV -NoTypeInformation c:\temp\DelveBlogs.csv
The output is a CSV file containing details of the Delve blogs found in the tenant. You can use the data to contact each user to explain that their content must be recovered and put elsewhere (perhaps by creating SharePoint news items for each post) before Microsoft shuts down Delve blogs. In many cases, I suspect that the Delve blogs are a forgotten memory that people tried once or twice and then gave up on. Not much work is likely needed to move content to a new platform because what’s there is probably not relevant today.
We cut coverage of Delve blogs from the Office 365 for IT Pros eBook after the 4th edition. We didn’t know that Microsoft would cut the feature, but if you tried to write anything in a Delve blog post, you soon realized that the software was full of flaws…
{"id":null,"mode":"button","open_style":"in_modal","currency_code":"EUR","currency_symbol":"\u20ac","currency_type":"decimal","blank_flag_url":"https:\/\/office365itpros.com\/wp-content\/plugins\/tip-jar-wp\/\/assets\/images\/flags\/blank.gif","flag_sprite_url":"https:\/\/office365itpros.com\/wp-content\/plugins\/tip-jar-wp\/\/assets\/images\/flags\/flags.png","default_amount":100,"top_media_type":"featured_image","featured_image_url":"https:\/\/office365itpros.com\/wp-content\/uploads\/2022\/11\/cover-141x200.jpg","featured_embed":"","header_media":null,"file_download_attachment_data":null,"recurring_options_enabled":true,"recurring_options":{"never":{"selected":true,"after_output":"One time only"},"weekly":{"selected":false,"after_output":"Every week"},"monthly":{"selected":false,"after_output":"Every month"},"yearly":{"selected":false,"after_output":"Every year"}},"strings":{"current_user_email":"","current_user_name":"","link_text":"Virtual Tip Jar","complete_payment_button_error_text":"Check info and try again","payment_verb":"Pay","payment_request_label":"Office 365 for IT Pros","form_has_an_error":"Please check and fix the errors above","general_server_error":"Something isn't working right at the moment. Please try again.","form_title":"Office 365 for IT Pros","form_subtitle":null,"currency_search_text":"Country or Currency here","other_payment_option":"Other payment option","manage_payments_button_text":"Manage your payments","thank_you_message":"Thank you for supporting the work of Office 365 for IT Pros!","payment_confirmation_title":"Office 365 for IT Pros","receipt_title":"Your Receipt","print_receipt":"Print Receipt","email_receipt":"Email Receipt","email_receipt_sending":"Sending receipt...","email_receipt_success":"Email receipt successfully sent","email_receipt_failed":"Email receipt failed to send. Please try again.","receipt_payee":"Paid to","receipt_statement_descriptor":"This will show up on your statement as","receipt_date":"Date","receipt_transaction_id":"Transaction ID","receipt_transaction_amount":"Amount","refund_payer":"Refund from","login":"Log in to manage your payments","manage_payments":"Manage Payments","transactions_title":"Your Transactions","transaction_title":"Transaction Receipt","transaction_period":"Plan Period","arrangements_title":"Your Plans","arrangement_title":"Manage Plan","arrangement_details":"Plan Details","arrangement_id_title":"Plan ID","arrangement_payment_method_title":"Payment Method","arrangement_amount_title":"Plan Amount","arrangement_renewal_title":"Next renewal date","arrangement_action_cancel":"Cancel Plan","arrangement_action_cant_cancel":"Cancelling is currently not available.","arrangement_action_cancel_double":"Are you sure you'd like to cancel?","arrangement_cancelling":"Cancelling Plan...","arrangement_cancelled":"Plan Cancelled","arrangement_failed_to_cancel":"Failed to cancel plan","back_to_plans":"\u2190 Back to Plans","update_payment_method_verb":"Update","sca_auth_description":"Your have a pending renewal payment which requires authorization.","sca_auth_verb":"Authorize renewal payment","sca_authing_verb":"Authorizing payment","sca_authed_verb":"Payment successfully authorized!","sca_auth_failed":"Unable to authorize! Please try again.","login_button_text":"Log in","login_form_has_an_error":"Please check and fix the errors above","uppercase_search":"Search","lowercase_search":"search","uppercase_page":"Page","lowercase_page":"page","uppercase_items":"Items","lowercase_items":"items","uppercase_per":"Per","lowercase_per":"per","uppercase_of":"Of","lowercase_of":"of","back":"Back to plans","zip_code_placeholder":"Zip\/Postal Code","download_file_button_text":"Download File","input_field_instructions":{"tip_amount":{"placeholder_text":"How much would you like to tip?","initial":{"instruction_type":"normal","instruction_message":"How much would you like to tip? Choose any currency."},"empty":{"instruction_type":"error","instruction_message":"How much would you like to tip? Choose any currency."},"invalid_curency":{"instruction_type":"error","instruction_message":"Please choose a valid currency."}},"recurring":{"placeholder_text":"Recurring","initial":{"instruction_type":"normal","instruction_message":"How often would you like to give this?"},"success":{"instruction_type":"success","instruction_message":"How often would you like to give this?"},"empty":{"instruction_type":"error","instruction_message":"How often would you like to give this?"}},"name":{"placeholder_text":"Name on Credit Card","initial":{"instruction_type":"normal","instruction_message":"Enter the name on your card."},"success":{"instruction_type":"success","instruction_message":"Enter the name on your card."},"empty":{"instruction_type":"error","instruction_message":"Please enter the name on your card."}},"privacy_policy":{"terms_title":"Terms and conditions","terms_body":null,"terms_show_text":"View Terms","terms_hide_text":"Hide Terms","initial":{"instruction_type":"normal","instruction_message":"I agree to the terms."},"unchecked":{"instruction_type":"error","instruction_message":"Please agree to the terms."},"checked":{"instruction_type":"success","instruction_message":"I agree to the terms."}},"email":{"placeholder_text":"Your email address","initial":{"instruction_type":"normal","instruction_message":"Enter your email address"},"success":{"instruction_type":"success","instruction_message":"Enter your email address"},"blank":{"instruction_type":"error","instruction_message":"Enter your email address"},"not_an_email_address":{"instruction_type":"error","instruction_message":"Make sure you have entered a valid email address"}},"note_with_tip":{"placeholder_text":"Your note here...","initial":{"instruction_type":"normal","instruction_message":"Attach a note to your tip (optional)"},"empty":{"instruction_type":"normal","instruction_message":"Attach a note to your tip (optional)"},"not_empty_initial":{"instruction_type":"normal","instruction_message":"Attach a note to your tip (optional)"},"saving":{"instruction_type":"normal","instruction_message":"Saving note..."},"success":{"instruction_type":"success","instruction_message":"Note successfully saved!"},"error":{"instruction_type":"error","instruction_message":"Unable to save note note at this time. Please try again."}},"email_for_login_code":{"placeholder_text":"Your email address","initial":{"instruction_type":"normal","instruction_message":"Enter your email to log in."},"success":{"instruction_type":"success","instruction_message":"Enter your email to log in."},"blank":{"instruction_type":"error","instruction_message":"Enter your email to log in."},"empty":{"instruction_type":"error","instruction_message":"Enter your email to log in."}},"login_code":{"initial":{"instruction_type":"normal","instruction_message":"Check your email and enter the login code."},"success":{"instruction_type":"success","instruction_message":"Check your email and enter the login code."},"blank":{"instruction_type":"error","instruction_message":"Check your email and enter the login code."},"empty":{"instruction_type":"error","instruction_message":"Check your email and enter the login code."}},"stripe_all_in_one":{"initial":{"instruction_type":"normal","instruction_message":"Enter your credit card details here."},"empty":{"instruction_type":"error","instruction_message":"Enter your credit card details here."},"success":{"instruction_type":"normal","instruction_message":"Enter your credit card details here."},"invalid_number":{"instruction_type":"error","instruction_message":"The card number is not a valid credit card number."},"invalid_expiry_month":{"instruction_type":"error","instruction_message":"The card's expiration month is invalid."},"invalid_expiry_year":{"instruction_type":"error","instruction_message":"The card's expiration year is invalid."},"invalid_cvc":{"instruction_type":"error","instruction_message":"The card's security code is invalid."},"incorrect_number":{"instruction_type":"error","instruction_message":"The card number is incorrect."},"incomplete_number":{"instruction_type":"error","instruction_message":"The card number is incomplete."},"incomplete_cvc":{"instruction_type":"error","instruction_message":"The card's security code is incomplete."},"incomplete_expiry":{"instruction_type":"error","instruction_message":"The card's expiration date is incomplete."},"incomplete_zip":{"instruction_type":"error","instruction_message":"The card's zip code is incomplete."},"expired_card":{"instruction_type":"error","instruction_message":"The card has expired."},"incorrect_cvc":{"instruction_type":"error","instruction_message":"The card's security code is incorrect."},"incorrect_zip":{"instruction_type":"error","instruction_message":"The card's zip code failed validation."},"invalid_expiry_year_past":{"instruction_type":"error","instruction_message":"The card's expiration year is in the past"},"card_declined":{"instruction_type":"error","instruction_message":"The card was declined."},"missing":{"instruction_type":"error","instruction_message":"There is no card on a customer that is being charged."},"processing_error":{"instruction_type":"error","instruction_message":"An error occurred while processing the card."},"invalid_request_error":{"instruction_type":"error","instruction_message":"Unable to process this payment, please try again or use alternative method."},"invalid_sofort_country":{"instruction_type":"error","instruction_message":"The billing country is not accepted by SOFORT. Please try another country."}}}},"fetched_oembed_html":false}
2 Replies to “The End of Delve Blogs”