Personally, I would store the post IDs (as opposed to URLs). Something like:
function wpse_143643_add_user_bookmark() {
if ( ! empty( $_GET['bookmark'] ) && is_singular() && is_user_logged_in() ) {
if ( ! $bookmarks = get_user_meta( $user_id = get_current_user_id(), 'bookmarks', true ) )
$bookmarks = array();
$bookmarks[] = get_queried_object_id();
$bookmarks = array_unique( $bookmarks );
update_user_meta( $user_id, 'bookmarks', $bookmarks );
}
}
add_action( 'template_redirect', 'wpse_143643_add_user_bookmark' );
So a link like http://example.com/my-post/?bookmark=true
will add my-post
to the current user’s bookmarks.
And to display the list of bookmarks:
if ( $bookmarks = get_user_meta( $user_id = get_current_user_id(), 'bookmarks', true ) ) {
$posts = get_posts(
array(
'post__in' => $bookmarks,
)
);
$list="<ul class="bookmarks">";
foreach ( $posts as $_post )
$list .= '<li><a href="' . get_permalink( $_post->ID ) . '">' . get_the_title( $_post->ID ) . '</a></li>';
$list .= '</ul>';
echo $list;
}